2016-10-26 2 views
3

В 2016 году турецкое правительство приняло решение остаться GMT + 3 часовой пояс для сохранения дневного света, но на Android:Android TimeZone Турция GMT

Calendar calendar = Calendar.getInstance(); 
TimeZone tz = TimeZone.getTimeZone("UTC"); 
calendar.setTimeInMillis(timestamp * 1000); 
Date currentTimeZone = (Date) calendar.getTime(); 
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis())); 

Так что проблема;
он показывает GMT + 3 на дату до ноября:
Ср 26 октября 18:00:00 GMT + 03: 00 +2016
но после ноября:
Mon Nov 07 20:00:00 GMT +02: 00 2016

он должен был оставаться на GMT + 3 в течение всего года, является ли это особой проблемой для Android-разработчика TimeZone или я делаю что-то неправильно?
Спасибо,

UPDATE
Хотя я добавил чек на часовой пояс и Gmt параметры,
ситуация будет немного хаотичной для Android устройств, которые используют часовой пояс Турции, причину после 29 октября часа устройства будет на час раньше, чем обычно, пока Android не выпустит обновление для этого, и пользователь применит это.

+0

TimeZone использует свойство устройства. Вы должны использовать непосредственно GMT + 03: 00 или +02 в вашем случае. – Vyacheslav

+0

Это proplem для каждого современного устройства, если часовой пояс изменен в конкретной стране – Vyacheslav

+0

Мобильные операторы могут помочь напрямую передавать часовые пояса на устройства. – Vyacheslav

ответ

5

Смотрите release note of tzdb-database для версии 2016g: 2016g

релиза - 2016-09-13 08:56:38 -0700

Изменение будущих отметки времени

Turkey switched from EET/EEST (+02/+03) to permanent +03, 
effective 2016-09-07. (Thanks to Burak AYDIN.) 
Use "+03" rather than an invented abbreviation for the new time. 

Очевидно, что ваше устройство Android по-прежнему использует устаревшую версию часового пояса. На самом деле у вас есть следующие варианты действий:

  • Ждите новую версию для Android (не привлекательно, не рекомендуется).
  • Используйте другую внешнюю библиотеку, такую ​​как Joda-Time-Android или мою библиотеку Time4A, которая уже использует 2016h (Threeten-ABP все еще позади, на самом деле на 2016e).
  • Или написать свой собственный хак с использованием фиксированных коррекций для Турции, например TimeZone.getTimeZone("GMT+03")
+0

Не должен ли последний быть 'Etc/GMT-3' - или у Android есть дополнительные псевдонимы? –

+0

@MattJohnson Согласно [документации для Android] (https://developer.android.com/reference/java/util/TimeZone.html), запись «GMT + 03» должна быть возможной, и я предпочел бы ее по сравнению с путающая нотация, основанная на Etc/GMT (из-за противоположного знака). –

+0

Спасибо. Это хорошая рекомендация! –

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

  • Нет связанных вопросов^_^