estou usando
NSDate *date = [NSDate date];
para obter a data, mas a data que eu tenho é de 2 horas.
Objetos NSDate
não têm fusos horários. Eles representam um momento absoluto no tempo. No entanto, quando você pede uma para sua description
(imprimindo com NSLog()
, por exemplo), ele precisa escolher um fuso horário. A opção “padrão” mais razoável é a GMT. Se você não estiver no GMT, a data parecerá incorreta, pelo valor do seu próprio deslocamento.
Você deve sempre usar um NSDateFormatter
para criar uma string para exibição. O fuso horário do formatador deve ser definido para o seu, que é o padrão.
Você pode obter sua data corrigida assim:
NSDate * dateGMT = [NSDate date]; NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT]; NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
-(NSDate *)getDateInCurrentSystemTimeZone { NSDate* sourceDate = [NSDate date]; NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate]; return destinationDate; }