Java时区和时区名称的快捷方式问题

Java时区和时区名称的快捷方式问题,java,timezone,Java,Timezone,我有一个linux应用程序,它以iOS XR格式显示时区: 技术系统时钟状态本地时间字符串10:16:12.523 CDT 2013年3月21日星期四 我还看到linux zdump输出中使用了CDT快捷方式: zdump-诉美国/哈瓦那| grep 2013 美国/哈瓦那太阳报2013年3月10日04:59:59 UTC=2013年3月9日星期六23:59:59 CST isdst=0 gmtoff=-18000 美国/哈瓦那太阳2013年3月10日05:00:00 UTC=太阳2013年3月

我有一个linux应用程序,它以iOS XR格式显示时区: 技术系统时钟状态本地时间字符串10:16:12.523 CDT 2013年3月21日星期四

我还看到linux zdump输出中使用了CDT快捷方式:

zdump-诉美国/哈瓦那| grep 2013 美国/哈瓦那太阳报2013年3月10日04:59:59 UTC=2013年3月9日星期六23:59:59 CST isdst=0 gmtoff=-18000 美国/哈瓦那太阳2013年3月10日05:00:00 UTC=太阳2013年3月10日01:00:00 CDT isdst=1 gmtoff=-14400 美国/哈瓦那太阳2013年11月3日04:59:59 UTC=太阳2013年11月3日00:59:59 CDT isdst=1 gmtoff=-14400 美国/哈瓦那太阳2013年11月3日05:00:00 UTC=太阳2013年11月3日00:00:00 CST isdst=0 gmtoff=-18000

但是当我运行System.out.printlnTimeZone.getTimeZoneCDT时;Java命令我得到GMT时区

谁能解释一下Java时区对象中存在捷径的标准是什么? 在哪里可以找到将时间字符串转换为日期对象的开源代码。。。我正在使用Java日历、SimpleDateFormat和Date上的当前解析器,但由于Java时区不识别CDT,它解析这个字符串,因为它是GMT时间。。。
1请参见java.util.DateFormatSymbols.getZoneStrings,它返回

•zoneStrings[i][0] - time zone ID
•zoneStrings[i][1] - long name of zone in standard time
•zoneStrings[i][2] - short name of zone in standard time
•zoneStrings[i][3] - long name of zone in daylight saving time
我们可以在TimeZone.getTimeZone中使用'TimeZone ID',其余部分使用SimpleDataFormat'z'通用时区

2对于SimpleDataFormat,CDT是可以的,请尝试

new SimpleDateFormat("z").parse("CDT");

它是有效的,我想试着回答你问题的第二部分。试试乔达时间

如果有帮助,一定要告诉我们。

tl;博士 在哪里可以找到将时间字符串转换为日期对象的开源代码

内置于Java.time类中的Java中

LocalDate.parse( "2017-01-23" )
LocalTime.parse( "14:56:00" )
LocalDateTime.parse( "2017-01-23T07:56:00" )
OffsetDateTime.parse( "2017-01-23T07:56:00-07:00" )
ZonedDateTime.parse( "2017-01-23T07:56:00-07:00[America/Los_Angeles]" )
使用java.time 您使用的是麻烦的旧日期时间类,它们现在是遗留的,被java.time类取代

LocalDate.parse( "2017-01-23" )
LocalTime.parse( "14:56:00" )
LocalDateTime.parse( "2017-01-23T07:56:00" )
OffsetDateTime.parse( "2017-01-23T07:56:00-07:00" )
ZonedDateTime.parse( "2017-01-23T07:56:00-07:00[America/Los_Angeles]" )
地带 java.util.TimeZone类被java.time.ZoneId和java.time.ZoneOffset替换。时区是特定区域相对于UTC的偏移量的变化历史

在遗留的java.time类中有许多糟糕的设计决策。使用3-4个字符的伪时区码就是这样一个糟糕的选择。切勿使用3-4个字母的缩写,如CDT、EST或IST,因为它们不是真正的时区,不标准,甚至不是唯一的

相反,您应该以大陆/地区的格式指定,例如,或太平洋/奥克兰

ISO 8601 避免使用设计拙劣的格式,如2013年3月21日10:16:12.523 CDT Thu,这些格式很难被人类阅读,很难被机器解析,不必要地依赖英语,并且使用模棱两可的格式比无用的格式更糟糕!伪时区。而是使用标准格式。默认情况下,java.time类使用这些格式。ZonedDateTime类通过在方括号中添加大陆/地区时区名称来扩展标准格式

示例:

2017-01-23 14:56:00 2017-01-23T14:56:00Z 2017-01-23T07:56:00-07:00[美国/洛杉矶] 对于其他格式,请使用DateTimeFormatter类。已经覆盖了数百次了,所以搜索Stack Overflow以获取更多信息和示例

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 该项目特别针对Android采用了上述Three-Ten Backport。 看见
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

仅供参考,该项目现在正在进行中,团队建议迁移到这些类。请参见.FYI,诸如、和java.text.SimpleTextFormat等麻烦的旧日期时间类现在已被这些类取代。看见