Переход на летнее время с использованием лучших практик NSTimeZone

Я создал еженедельное представление (похожее на календарь) с заголовком дня недели. Я создаю текущее время, используя приведенный ниже код:

+(NSDate *) getCurrentDate {

    NSDate* datetime = [NSDate date];
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/Juneau"];// this is dynamic and coming from server.
    [dateFormatter setTimeZone:timeZone]; // Prevent adjustment to user's local time zone.
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
    NSString* dateTimeInIsoFormatForUserTimeZone = [dateFormatter stringFromDate:datetime];  
    return [dateFormatter dateFromString:dateTimeInIsoFormatForUserTimeZone];

}

Я использую эту дату в качестве ссылки для создания даты недели (с понедельника по воскресенье). Мой код работает нормально для всех случаев, но я терпел неудачу в часовом поясе DST.

Я видел аналогичный вопрос о переполнении стека, но они более субъективны и не могут решить мою проблему. Ответ с кодом и передовой практикой высоко ценится. Заранее спасибо!.


person kaushal    schedule 18.07.2016    source источник
comment
Зачем вам нужна дата › строка › дата?   -  person Droppy    schedule 18.07.2016
comment
Я хочу создать текущую дату в часовом поясе Америки/Джуно. Сначала я создаю дату с системным часовым поясом, а затем конвертирую ее в часовой пояс Америки/Джуно. пожалуйста, дайте мне знать, если у вас есть лучший способ сделать это.   -  person kaushal    schedule 18.07.2016
comment
Но NSDate не имеет часового пояса, поэтому любая информация о часовом поясе теряется при возврате даты. Использование того же средства форматирования даты для создания даты › строки › ​​даты ничего не дает, верно?   -  person Droppy    schedule 18.07.2016
comment
Спасибо @Droppy. Как вы объяснили, этот вопрос некорректен. Так что я удалю это, чтобы очистить форум.   -  person kaushal    schedule 20.07.2016


Ответы (1)


[[NSTimeZone *yourTimeZone*] secondsFromGMTForDate:*yourDate*]

С помощью этого метода вы можете получить secondsFromGMTForDate для определенного timezone, который также корректируется с переходом на летнее время.

Вы можете использовать это смещение для создания объекта даты в вашем часовом поясе и соответствующего отображения weekview.

person 7vikram7    schedule 18.07.2016
comment
Я удалил средство форматирования даты и применил смещение часового пояса, это работает для меня. Пожалуйста, улучшите свой ответ с UTC для расчета смещения часового пояса пользователя с текущей датой, чтобы он ответил :) - person kaushal; 03.11.2016