首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java TimeZone和时区名称快捷键问题

Java TimeZone和时区名称快捷键问题
EN

Stack Overflow用户
提问于 2013-03-21 16:07:24
回答 3查看 2.2K关注 0票数 1

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

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

-v美国/哈瓦那太阳报2013年美国/哈瓦那太阳报2013年3月10日04:59 2013年世界时=星期六23:59 2013年科技委isdst=0 gmtoff=-18000美国/哈瓦那太阳报2013年3月10日05:00 2013年UTC = Sun 2013年3月01:00 2013年11月3日59:59 2013年11月3日:59:59 2013年11月3日:59:59 2013年11月3日:59:59 2013年CDT isdst=1 gmtoff=-14400美国/哈瓦那Sun 11月3: 00:00:00 :00

但是当我运行"System.out.println(TimeZone.getTimeZone("CDT"));“命令时,我得到了GMT时区.

  1. 有谁能解释一下在Java timeZone对象中存在捷径的标准是什么?
  2. 在哪里可以找到将时间字符串转换为“日期”对象的开放源代码.我在Java、SimpleDateFormat和Date上使用的当前解析器,但是由于TimeZone不识别"CDT“,所以它解析这个字符串,因为它是GMT时间.
EN

回答 3

Stack Overflow用户

发布于 2017-04-30 07:51:30

tl;dr

在哪里可以找到将时间字符串转换为“日期”对象的开放源代码?

在java.time类中内置到Java中。

代码语言:javascript
复制
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替换。时区是特定地区与世界协调时相抵消的变化的历史.

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

相反,您应该以continent/region格式指定一个continent/region,例如America/MontrealAfrica/CasablancaPacific/Auckland

ISO 8601

避免使用设计糟糕的尴尬格式,如"10:16:12.523 CDT清华2013年3月21日“,这些格式很难被人类阅读,很难用机器解析,没有必要地依赖英语,并且使用歧义(比无用更糟糕!)假时区。相反,可以使用标准的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类。已经覆盖了数百次,所以搜索堆栈溢出以获得更多的信息和示例。

关于java.time

java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.DateCalendarSimpleDateFormat

尤达-时间项目现在在维护模式中,建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

在哪里获得java.time类?

  • Java 8Java 9,以及后来的
    • 内置的。
    • 带有捆绑实现的标准Java的一部分。
    • Java 9添加了一些次要的特性和修复。

  • Java 6Java 7
    • java.time的大部分功能都是在http://www.threeten.org/threetenbp/中移植到Java6&7中的。

三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter更多

票数 2
EN

Stack Overflow用户

发布于 2013-03-21 17:04:00

1)参见java.util.DateFormatSymbols.getZoneStrings,它返回一个

代码语言:javascript
复制
•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()中使用“时区ID”,其余的作为SimpleDateFormat 'z‘通用时区

2) CDT对于SimpleDateFormat来说是可以的,尝试

代码语言:javascript
复制
new SimpleDateFormat("z").parse("CDT");

它起作用了

票数 1
EN

Stack Overflow用户

发布于 2013-03-21 17:10:16

我会试着回答你问题的第二部分。试试Joda-time

http://joda-time.sourceforge.net/index.html

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15552564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档