Android TimeZone Turkey GMT

怎甘沉沦 提交于 2020-01-14 14:19:47

问题


For 2016 Turkish Government decided to stay GMT+3 timezone to save daylight, but on android:

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()));

So the problem is;
it's showing GMT+3 for the date before November:
Wed Oct 26 18:00:00 GMT+03:00 2016
but for after November:
Mon Nov 07 20:00:00 GMT+02:00 2016

it should've stay at GMT+3 for the whole year, is that a special issue to android lib of TimeZone or am I doing something wrong?
Thanks,

UPDATE
Although I've added a check for timezone and gmt parameters,
The situation will be a little chaotic for the Android devices that uses Turkey's timezone, cause after Oct 29 the hour of device will be an hour early than normal, until Android releases a update for that and user applies that.


回答1:


See the release note of tzdb-database for version 2016g:

Release 2016g - 2016-09-13 08:56:38 -0700

Changes to future time stamps

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.

Obviously, your Android device still uses an outdated timezone version. Actually you have following options to proceed:

  • Wait for a new Android version (not attractive, not recommended).
  • Use another external library like Joda-Time-Android or my library Time4A which already use 2016h (Threeten-ABP is still behind, actually on 2016e).
  • Or write your own hack using fixed offsets for Turkey, for example TimeZone.getTimeZone("GMT+03")


来源:https://stackoverflow.com/questions/40262842/android-timezone-turkey-gmt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!