Как вывести NSDate с defaulttimezone? - PullRequest
       0

Как вывести NSDate с defaulttimezone?

0 голосов
/ 26 сентября 2010

Как вывести текущую дату и время с поясом по умолчанию? Когда я использую следующий код, я всегда получаю время по Гринвичу. Можно ли конвертировать NSDate в defaulttimezone? Я не могу использовать NSDateFormatter, потому что мне нужен объект NSDate с правильным временем.

NSDate *date = [NSDate date];
NSLog(@"Time: %@", date);

Вывод: 2010-09-26 12:07:12 TimeTest [2641: 207] Время: 2010-09-26 12:07:12 GMT

Обновление: Когда мне нужно вернуть объект NSDate в нужное время, как я могу использовать NSDateFormatter с setTimeZone?

 NSDate* date = [NSDate date];

 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
 [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
 NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"MESZ"];
 [formatter setTimeZone:tz];

 NSString *datestr = [formatter stringFromDate:date];
 NSLog(@"%@", datestr);

 NSDate *datenew = [formatter dateFromString:str];
 NSLog(@"%@", datenew);

Первый NSLog выводит правильное время, но когда я хочу создать объект NSDate с правильным временем, я снова получаю неправильное время.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2010

Я не могу использовать NSDateFormatter, потому что мне нужен объект NSDate с правильным временем.

Это не имеет никакого смысла.NSDate представляет один момент времени.Он не знает и не заботится о часовых поясах.Например, Сегодня, 12:00 по Гринвичу и Сегодня, 06:00 –0600 будут представлены одним и тем же объектом NSDate.

Для отображения даты в определенном часовом поясе используйте NSDateFormatterв частности, его setTimeZone: метод.

1 голос
/ 08 декабря 2012

Иногда вам НУЖНО иметь текущее время ([NSDate date], но преобразовать его в свой часовой пояс, и не просто отформатировать таким образом для пользователя, но и сделать с ним вычисления. Я придумал этот простой решение:

double timeDifference = [[NSTimeZone systemTimeZone] secondsFromGMT];
double now = [[NSDate date] timeIntervalSince1970] + timeDifference;

Это полезно для получения текущего timeInterval в моем часовом поясе. В моем случае все даты были очень гибкими и динамичными и не были связаны с каким-либо календарем. Я работал со временем относительно времени начала.

Сложно объяснить. В любом случае, возможно, некоторые люди с моей проблемой, которые оказались в этом посте, теперь тоже имеют свой ответ.

...