Android TimeZone土耳其GMT

时间:2016-10-26 12:53:22

标签: android timezone timestamp

2016年土耳其政府决定保留GMT + 3时区以挽救日光,但在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()));

所以问题是;
它在11月之前的日期显示GMT + 3:
周三10月26日18:00:00 GMT + 03:00 2016
但是在11月之后:
Mon Nov 07 20:00:00 GMT + 02:00 2016

它应该全年保持GMT + 3,对于TimeZone的android lib来说是一个特殊问题还是我做错了什么?
谢谢,

更新
虽然我已经添加了时区和gmt参数的检查,但是 对于使用土耳其时区的Android设备,情况会有点混乱,因为10月29日之后设备的小时将比正常时间提前一小时,直到Android发布更新并且用户应用它。

1 个答案:

答案 0 :(得分:5)

有关版本2016g的信息,请参阅release note of tzdb-database

  

发布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")