6 часов добавляются к объекту NSDate при использовании NSDateFormatter - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь отформатировать объект даты и замечаю строку, которую я передаю;6 часов добавляются к моему времени.Кажется, это связывает мой объект даты и времени с GMT.

Мой код:

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd h:mm:ss a"];
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];
    NSDate *date = [formatter dateFromString:@"2012-02-01 03:38:12 AM"];



    NSLog(@"%@", date);

Результат:

2012-02-01 09:38:12+ 0000

Я пробовал это с setTimeZone и без него, и это не имеет значения.Любые идеи о том, почему это отображается как время по Гринвичу?

Спасибо, Блоха

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Дата, которую создает ваш форматтер, не связана ни с одним часовым поясом, но метод NSDate description (который используется NSLog для вывода) преобразует любую дату в UTC.Вам придется использовать другой (или тот же) метод форматирования даты stringFromDate:, чтобы напечатать его с другим часовым поясом.

0 голосов
/ 02 февраля 2012

Все NSDates являются абсолютными временами, что означает, что 3:00 AM по центральному времени в Соединенных Штатах Америки - 9:00 UTC. Я подозреваю, что ваш systemTimeZone является центральным временем в Соединенных Штатах.

NSLog всегда показывает время в UTC.

Если вы хотите видеть в виде строки, какое время находится в вашем часовом поясе, вы можете использовать тот же форматер даты stringFromDate: метод и установить для этого часового пояса форматера даты этот часовой пояс .

Форматирование даты NSLog раздражает, потому что приводит к путанице, которую вы испытываете.

...