gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:27:15 27 4
gpt4 key购买 nike

我有一个 Linux 应用程序,它以 iOS-XR 格式显示时间和时区:技术系统时钟状态本地时间字符串“10:16:12.523 CDT Thu Mar 21 2013”​​

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

zdump -v America/Havana | grep 2013 America/Havana Sun Mar 10 04:59:59 2013 UTC = Sat Mar 9 23:59:59 2013 CST isdst=0 gmtoff=-18000 America/Havana Sun Mar 10 05:00:00 2013 UTC = Sun Mar 10 01:00:00 2013 CDT isdst=1 gmtoff=-14400 America/Havana Sun Nov 3 04:59:59 2013 UTC = Sun Nov 3 00:59:59 2013 CDT isdst=1 gmtoff=-14400 America/Havana Sun Nov 3 05:00:00 2013 UTC = Sun Nov 3 00:00:00 2013 CST isdst=0 gmtoff=-18000

但是当我运行“System.out.println(TimeZone.getTimeZone("CDT"));”时Java命令我获取GMT时区...

  1. 谁能解释一下 Java timeZone 对象中存在快捷方式的标准是什么?
  2. 在哪里可以找到用于将时间字符串转换为“Date”对象的开源代码...当前解析器我在 Java Calendar、SimpleDateFormat 和 Date 上使用中继,但由于 Java TimeZone 无法识别“CDT”它解析该字符串,因为它是 GMT 时间...

最佳答案

tl;博士

where can I find an open-source code for converting time strings into "Date" objects

内置于 Java 的 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.time

您正在使用麻烦的旧日期时间类,这些类现在已被遗留,并被 java.time 类取代。

ZoneId

java.util.TimeZone 类被 java.time.ZoneIdjava.time.ZoneOffset 替换。时区是特定区域相对 UTC 偏移量的变化历史记录。

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

相反,您应该指定 proper time zone name格式为大洲/地区,如America/Montreal , Africa/Casablanca ,或太平洋/奥克兰

ISO 8601

避免使用设计糟糕的笨拙格式,例如“10:16:12.523 CDT Thu Mar 21 2013”​​,这些格式难以被人类阅读,难以被机器解析,不必要地依赖英语,并使用不明确的(比无用!)伪时区。而是使用标准 ISO 8601格式。 java.time 类默认使用这些格式。 ZonedDateTime 类通过在方括号中附加大陆/地区时区名称来扩展标准格式。

示例:

  • 2017-01-23
  • 14:56:00
  • 2017-01-23T14:56:00Z
  • 2017-01-23T07:56:00-07:00[美国/洛杉矶]

对于 ISO 8601 以外的格式使用 DateTimeFormatter 类。已经介绍了数百次,因此请搜索 Stack Overflow 以获取更多信息和示例。

<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于Java TimeZone 和时区名称的快捷方式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com