Настраивается ли NSTimeZone в iPhone автоматически для перехода на летнее время? - PullRequest
1 голос
/ 21 апреля 2011

У меня довольно простой вопрос.У меня есть набор дат в UTC.Я хочу представить их пользователю в правильном местном времени, настроенном (или нет, если летнее время не действует) для летнего времени.

Так что, если я сделаю что-то вроде следующего, будет установлена ​​временная меткаправильно по местному времени в Нью-Йорке, принимая во внимание DST, когда действует

NSDate *date = initialise with a UTC time

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
    [formatter setTimeZone:timeZone];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *timeStamp = [formatter stringFromDate:date];

Или мне нужно сделать что-то еще?Я проверяю NSTimeZone.isDaylightSavingTime / NSTimeZone.daylightSavingTimeOffset и корректирую свою дату соответственно или что-то в этом роде?

Заранее спасибо?

Twibbles.

1 Ответ

2 голосов
/ 13 марта 2014

Да, NSDateFormatter автоматически настроится на летнее время, если вы создадите часовой пояс с [NSTimeZone timeZoneWithName]. NSTimeZone знает правила перехода на летнее время для каждого часового пояса и может заглянуть в будущее и прошлое и будет делать правильные шаги для NSDate, переданного stringForDate. Тем не менее, если вы создаете NSTimeZone с [NSTimeZone timeZoneForSecondsFromGMT], DST настройки не будут сделаны. Следует также отметить, что правила перехода на летнее время могут быть изменены, что означает, что NSTimeZone не гарантирует, что всегда будет действовать правильно для всех часовых поясов.

Вам не нужно использовать NSTimeZone.isDaylightSavingTime или NSTimeZone.daylightSavingTimeOffset для форматирования NSDate в качестве точного местного времени DST. Оба эти метода работают в текущем времени. Если вы хотите узнать, попадает ли NSDate в летнее время в часовом поясе, вы можете использовать метод NSTimeZone.isDaylightSavingTimeForDate, и если вы хотите узнать, каково смещение летнего времени для NSDate, вы можете использовать метод NSTimeZone.daylightSavingTimeOffsetForDate.

...