我使用GMT-8、GMT、PST、EST等TimeZone字符串构建了一个Java TimeZone对象。这并没有考虑时区是否启用了夏令时或not.Now,因此需要包含此检查,并且夏令时作为单独的标志给出,而不是作为输入。我不确定TimeZone是否有直接方法来更改该timezone的daylight存储属性。
因此,如果我得到一个像PST和DaylightSaving这样的输入为真,那么我必须改变字符串,因为PDT.Whats更糟糕的是,有时我会得到像GMT-8或GMT-6这样的输入,日光标志为真或假。有没有出路?
我不能使用第三方TimeZone相关类
代码示例:
TimeZone timeZone = TimeZone.getTimeZone("EST");
TimeZone timeZone = TimeZone.getTimeZone("PST");
TimeZone timeZone = TimeZone.getTimeZone("GMT-8");发布于 2010-12-22 13:13:07
我认为Java应该自己找出时区是否使用夏令时,以及何时使用夏令时。
因此,如果您尝试使用该时区设置某个日期对象的格式,则输出应反映夏令时。
这是否可靠(考虑到这一领域的频繁变化),我不知道。您可能应该更新到最新的JVM以获得最新的时区数据库文件(如果您不能这样做,可以使用separate Time Zone Update tool )。
发布于 2010-12-22 13:49:51
像"PST“和"GMT-8”这样的时区字符串通常是模棱两可的,并且通常不会告诉您夏令时规则是否生效。(例如,“太平洋标准时间”是指“太平洋标准时间”和“巴基斯坦标准时间”。)
如果您希望获得正确的时区和夏令时规则,则必须使用完整的时区名称来获取timezone对象;即,名称的格式为:“America/Los”。
或者使用ISO 8601 date / time values。
必须修改很多代码,而且说服其他人获得批准也不是件容易的事情。
嗯,我想说你在这里别无选择……如果你想让你的代码获得正确的时区等等。
做一些研究,了解问题,解释你的老板/客户的问题,让他们在不能正确获取夏令时的应用程序和使用更合理的日期格式和时区规范方法的应用程序之间做出选择。
发布于 2010-12-22 13:25:22
我想补充的另一件事是,3个字母的时区id的使用被弃用,如下面的JavaDoc所示。您需要使用here所示的名称
三个字母的时区ID
为了与JDK 1.1.x兼容,还支持其他一些三个字母的时区ID(例如"PST“、"CTT”、"AST")。但是,不建议使用它们,因为相同的缩写通常用于多个时区(例如,"CST“可以是U.S.“中央标准时间”和“中国标准时间”),然后Java平台只能识别其中的一个。
https://stackoverflow.com/questions/4506333
复制相似问题