2013-07-10 10 views
1

Мне нужно показать дату в конкретном часовом поясе, включая DST (европейское время). Приложение будет использоваться в Литве, поэтому часовой пояс +3 летом и +2 в другое время. Дело в том, что у меня только список дат, и я не знаю, как показывать +3 для летних дат и +2 для других дат. В настоящее время у меня есть часовые пояса:Как показать дату с часовым поясом на дату, соответствующую определенной стране/зоне?

// Eastern European Summer Time UTC + 3 hours 
NSTimeZone *timeZoneWithDst = [NSTimeZone timeZoneWithAbbreviation:@"EEST"]; 

//Eastern European Time UTC + 2 hours 
NSTimeZone *timeZoneWithoutDst = [NSTimeZone timeZoneWithAbbreviation:@"EET"]; 

Но как Переберите мой список дат и расчета следует добавить +3 или +2 на сегодняшний день?

ОБНОВЛЕНИЕ Наконец-то я получил его, применив предложение Мартина Р. использовать часовой пояс по имени, а не аббревиатурой. Таким образом, дата с этим часовым поясом автоматически обрабатывает DST. Вот мой код для преобразования дат:

NSTimeZone *TimeZone = [NSTimeZone timeZoneWithName:@"Europe/Vilnius"]; 
NSInteger seconds = [myTimeZone secondsFromGMTForDate:someDate]; 
NSDate *result = [NSDate dateWithTimeInterval:seconds sinceDate:someDate]; 

ответ

1

Для преобразования NSDate в строковое представление, используйте NSDateFormatter. По умолчанию используется локальный часовой пояс. Для отображения даты в соответствии с конкретной временной зоне, вы можете установить

NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"Europe/Vilnius"]; 
[dateFormatter setTimeZone:tz]; 

(По http://www.timezoneconverter.com/cgi-bin/findzone, часовой пояс для Литвы «Европа/Вильнюс».)

0

Это очень похоже альтернатива, работал на меня, в Свифте:

var currentDate: NSDate { 
    let currentLocalTime = NSDate() 

    let localTimeZone = NSTimeZone.systemTimeZone() 
    let secondsFromGTM = NSTimeInterval.init(localTimeZone.secondsFromGMT) 
    let resultDate = NSDate(timeInterval: secondsFromGTM, sinceDate: currentLocalTime) 

    return resultDate 
} 
Смежные вопросы