Pergunta

Eu estou tendo problemas com a inclusão de valores de datas e também a obtenção de diferenças entre datas.As datas e componentes calculados estão incorretas.

Assim, para adicionar, se eu adicionar a 1,5 meses, eu só recebo 1 mês, no entanto, se eu adicionar qualquer número inteiro ie (1 ou 2 ou 3 e etc) ele calcula corretamente.

Float32 addAmount = 1.5;

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setMonth:addAmount];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 [gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

 NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0];

Agora, pela diferença, se eu tiver uma data que tenha sido adicionado com exatamente um ano (quase o mesmo código acima), ele adiciona corretamente, mas quando a diferença é calculado, eu fico 0 anos, 11 meses e 30 dias.

NSDate *startDate = Date1;
NSDate *endDate = Date2;

NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
              fromDate:startDate
                toDate:endDate options:0];

NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];

O que estou fazendo de errado?Também adicionei o kCFCalendarComponentsWrap constanct nas opções tanto para a adição e a diferença de funções, mas sem diferença.

Obrigado

Foi útil?

Solução

Assim, para adicionar, se eu adicionar 1,5 mês, eu apenas mais 1 mês, no entanto, se eu adicionar qualquer número inteiro ie (1 ou 2 ou 3 e etc) ele calcula corretamente.

O setMonth: método em NSDateComponents toma uma NSInteger, não é um número de ponto flutuante.Assim, o comportamento é correto, como é simplesmente a truncar a 1,5 para 1.

Agora, pela diferença, se eu tiver uma data que tenha sido adicionado com exatamente um ano (quase o mesmo código acima), ele adiciona corretamente, mas quando o a diferença é calculado, eu fico 0 anos, 11 meses e 30 dias.

A menos que você mostrar o código como seu Data1 e Data2 são criadas as variáveis, não há nenhuma maneira real para contar.

(Você também está com vazamento de memória acima;sempre correspondem a uma alocação com um release/autorelease.E tente não dar a suas variáveis de capital de letras, pois, como uma questão de estilo, que deve ser feito apenas para nomes de classe)

Outras dicas

Finalmente encontrei o problema com a diferença de data, quando o salvava em um banco de dados, usei o timeInterValsent1970 com um valor duplo, mas ao preencher e configurá -lo em um datepicker, eu estava usando um tipo de coluna INT.

Obrigado Shaggy Frog por me dirigir na direção certa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top