2015-07-10 6 views
9

Я работаю над временем, которое отображает время разных часовых поясов. Для этого я использую стандартное время haDate (UTC tz).secondsFromGMT возвращает разные значения на устройстве и симуляторе

displayDate Я использую системный часовой пояс api. Часовой пояс: America/Santiago (UTC-3: 00).

NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone]; 
_displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT]; 

код "haDate" -

NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; 
formatter.timeZone=[NSTimeZone timeZoneWithName:@"UTC"]; 
NSString *utcTimeCurrent=[dict objectForKey:@"utctime"]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
_haDate=[formatter dateFromString:utcTimeCurrent]; 

Вопрос в том, когда я запускаю этот код на тренажере tz.secondsFromGMT возвращает -10800 но на устройстве он возвращает -14400, что 1 час меньше.

Прибор и симулятор, использующий то же самое времяZone Asia/Kolkata (UTC + 5: 30). Я знаю, что America/Santiago использует DST, но почему он дает мне разные секунды, даже оба (имитатор и устройство) находятся в одно и то же время.

Что не так и как я могу это исправить?

ПРИМЕЧАНИЕ

Чтобы устранить проблему летнего времени я использую этот код. Но он всегда идет на другую часть на обоих устройствах. (BTW ниже код не требуется, поскольку tz.secondsFromGMT всегда возвращаются секунды после корректировки перехода на летнее время.)

NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone]; 
if (tz.isDaylightSavingTime) 
{ 
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT+tz.daylightSavingTimeOffset]; 
} 
else 
{ 
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT]; 
} 

Когда я войти в TZ -

На симуляторе

tz America/Santiago (GMT-3) offset -10800

На устройстве

tz America/Santiago (GMT-4) offset -14400

Так что он не использует DST.

Примечание 2

Эта проблема возникает только в IPad 2. Другие устройства работают отлично.

Примечание 3

Мой IPad 2 с использованием IOS 8.4. Оба часовых пояса (Чили Стандартное время - America/Santiago и Исландское стандартное время Пасхи - Pacific/Easter) дают мне неправильные секунды

+0

Вы можете проверить, является ли то же самое для всех вас установок значение _timeZone? –

+0

@JoeSmith да, есть. –

+0

Какова ценность _timeZone? От куда это? –

ответ

0

Чили изменила TZ в начале 2015 года. Возможно, ваш iPad 2 имеет версию iOS с использованием устаревшей базы данных часовых поясов , Обновите его.

Время в Чили делится на два часовых пояса. Continental Chile использует временное смещение UTC-03: 00. Кроме того, остров Пасхи использует временное смещение UTC-05: 00.[1]

До 2015 года Continental Chile использовал временное смещение UTC-04: 00 и остров Пасхи, используя UTC-06: 00 для стандартного времени, с летним временем примерно с октября по март каждый год. Однако в январе 2015 года было объявлено, что во всей стране будет сохраняться временное смещение, используемое в летнее время.

https://en.wikipedia.org/wiki/Time_in_Chile

+0

У моего ipad есть ios 8.4. И да, еще одно и то и другое временные зоны (Континентальная Чили и Остров Пасхи) дают мне неправильные секунды. Вопрос обновлен. –

+0

Хммм, iOS 8 выпущен в сентябре 2014 года, 8,4 в середине 2015 года. Может, Apple не захочет менять TZ на старых устройствах по некоторым причинам? Что произойдет, если вы попробуете другой город в том же ЦЗ, но за пределами Чили? –

+0

У меня iPhone 4S (конец 2011 года), и время правильное на 4S. Это проблема только на iPad 2. –

Смежные вопросы