Java时区和时区名称的快捷方式问题
我有一个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时间。。。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月
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等麻烦的旧日期时间类现在已被这些类取代。看见