NSDate 5-часовой выходной - PullRequest
       2

NSDate 5-часовой выходной

3 голосов
/ 17 сентября 2011

Я запускаю следующий код:

NSDate * now = [NSDate date];

NSLog(@"now: %@", now);

и получаю:

2011-09-16 16:14: 16.434 iSavemore [1229: 7907] сейчас: 2011-09-16 21:14:16 + 0000

Как вы видите, я запускаю это в 16:14:16 (16:14), ноNSDate возвращается 21:16:16 (9:14 вечера!).Это проблема Xcode4 или NSDate?

Ответы [ 4 ]

9 голосов
/ 17 сентября 2011

NSDate по умолчанию - универсальный часовой пояс (он же GMT).

Полагаю, вы где-то на восточном побережье, на 5 часов позже UTC.

Попробуйте добавить это в свой форматер даты ...

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

[dateFormatter setLocale:[NSLocale currentLocale]];

... и вы должны увидеть ваше местное время.

Если вы хотите использовать указанную локаль, а не «currentLocale», создайте NSLocale для соответствующей локали.

NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

[dateFormatter setLocale:usLoc];

... на самом деле это США (поэтому, возможно, не Центральный).

Более подробную информацию о часовом поясе можно найти здесь ...

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

Однако, если вы хотите показать время истечения срока действия, не хотите ли вы все еще указать его в currentLocale пользователя?

5 голосов
/ 17 сентября 2011

Если вы посмотрите на вывод, вы увидите, что журнал включает часовой пояс:

2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000
                                                                      ^^^^^^

Метка времени вашего журнала - местное время.Я предполагаю, что вы находитесь в часовом поясе, который на 5 часов опережает UTC.

A NSDate относится к конкретному моменту времени.Это зависит от вас, чтобы показать это, как вы хотите;обычно с NSDateFormatter.

Это причина, по которой вы увидите множество рекомендаций против сохранения времени или даты как что-либо иное, чем NSDate.Если вы попытаетесь сохранить его в виде строки, то позже вы столкнетесь с большими трудностями при работе с дисплеем в разных часовых поясах.

0 голосов
/ 17 сентября 2011

Попробуйте установить часовой пояс NSDate, который соответствует вашим потребностям, например [NSTimeZone localTimeZone]

0 голосов
/ 17 сентября 2011

Просто дикая догадка, но, может быть, это как-то связано с часовыми поясами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...