我只想分享我对Java TimeZone的体验。这是问题:
时区的inDaylightTime(Date date)
函数始终返回0,无论日期如何。一贯getDSTSavings()
也返回0 这里是代码段来创建时区:带自定义ID的Java TimeZone没有考虑到夏令时
Timezone timezone = TimeZone.getTimeZone("GMT+1:00");
我只想分享我对Java TimeZone的体验。这是问题:
时区的inDaylightTime(Date date)
函数始终返回0,无论日期如何。一贯getDSTSavings()
也返回0 这里是代码段来创建时区:带自定义ID的Java TimeZone没有考虑到夏令时
Timezone timezone = TimeZone.getTimeZone("GMT+1:00");
DST在与ID创建的时区对象像"UTC+1:00"
(或“GMT + 1:00”)将是具有不同时区对象创建与相应的字符串"Europe/Berlin"
,所以如果DST对您的应用程序很重要,请始终使用完整的字符串ID而不是相应的时间偏移量。
因此更改时区定义:
Timezone timezone = TimeZone.getTimeZone("Europe/Berlin");
将解决这个问题。
不,TimeZone
API数据显示日光节约。您正在使用自定义时区ID。
从
没有夏令时转换安排可以用自定义时区ID
所以被指定的时区API的文档,你需要指定的时区ID可以得到节省一天的光
通常情况下,您会使用getDefault获取TimeZone,它会根据运行程序的时区创建TimeZone。例如,对于在日本运行的程序,getDefault会根据日语标准时间创建TimeZone对象。您还可以使用getTimeZone和时区标识获取TimeZone。例如,美国太平洋时区的时区ID是“America/Los_Angeles”。所以,你可以得到一个美国太平洋时间TimeZone对象:
使用的时区ID,这会照顾储蓄一天光在特定区域
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
你对**自定义时区**是正确的。但在现实世界中,_time差异description_和_Olson id_可互换使用(例如在windows时钟中)。因此,人们可能不会仔细注意文档,并考虑两种时区**的表示形式(如我所做的那样)。 我故意提出了问题的主题,因为如果有人犯了我犯的错误,他们会看到像这样的问题。所以你是对的,没有什么bug或者TimeZone API的东西。也许我应该改变问题的标题。 –
另外,getDefault()没有得到正确的时区(DST设置为零)[这里是示例](http://ideone.com/OXwiIu) –
@AlirezaMirian:我刚刚更新了标题。希望现在对于研究相同问题的人来说更有用。 – Olaf
是。另请参阅[时区标记wiki](http://stackoverflow.com/tags/timezone/info)中的“时区!=偏移”。 –