Вопрос:

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

objective-c xcode4

1885 просмотра

4 ответа

58 Репутация автора

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

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 (4:14 вечера), но NSDate возвращается 21:16:16 (9:14 вечера!). Это проблема Xcode4 или NSDate?

Автор: Troy Compton Источник Размещён: 16.09.2011 09:22

Ответы (4)


-1 плюса

464 Репутация автора

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

Автор: dee Размещён: 16.09.2011 09:24

0 плюса

1289 Репутация автора

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

Автор: Tim Specht Размещён: 16.09.2011 09:25

9 плюса

4603 Репутация автора

Решение

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 пользователя?

Автор: Snips Размещён: 16.09.2011 09:26

5 плюса

107573 Репутация автора

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

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

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

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

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

Автор: Abizern Размещён: 16.09.2011 09:32
Вопросы из категории :
32x32