NSDate / NSDateFormatter, возвращающий GMT на iPhone iOS 4.3 - PullRequest
1 голос
/ 26 августа 2011

Почему этот код дает мне время по Гринвичу?(Я в американском горном времени)

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]  autorelease];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];     

NSDate *now = [NSDate date];
NSString *storeTime = [dateFormatter stringFromDate:now];

Ответы [ 2 ]

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

NSDate представляет конкретный момент времени, независимо от часового пояса .Другими словами, NSDate не имеет часового пояса.Часовые пояса актуальны только тогда, когда вы хотите отобразить дату для пользователя.Таким образом, 9:30 вечера по горному времени равно 3:30 утра (+1 день) по Гринвичу (при условии разницы во времени 6 часов).

NSDate, поскольку у него нет часового пояса, должен выбрать один при создании читаемой человеком версии, чтобы она возвращалась как -description.Для простоты, всегда возвращает дату, отформатированную в часовом поясе GMT ​​.Если вы хотите, чтобы отформатированная дата находилась в другом часовом поясе, вы можете установить свойство -timezone для NSDateFormatter, а затем преобразовать дату в строку, используя метод -stringFromDate:.

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

Да, оказывается, это ошибка в Apple Numbers на Mac. Числа не интерпретировали строку даты, а скорее добавляли смещение по времени. Строка NSDate после форматирования всегда была правильной.

...