它返回GMT的默认时区。
在时区中使用带有“ z”的SimpleTimeFormat,它将打印“ PDT”。但是“ PDT”不在TimeZone.getAvailableIDs()返回的列表中。真奇怪!
谁知道为什么“ PDT”不是标准的tz?该如何处理?有人调用我的API,并将“ PDT”作为时区传递。谢谢。
PDT 不是时区谁知道为什么“ PDT”不是标准的tz?
因为“ PDT”不是时区!
“ PDT”是一种伪时区,媒体使用它来伪装地指示一组时区以及一个指示符,如果它们打算在启用夏令时(DST)的时间段(PST)中显示。避免使用这2-4个字母代码,因为它们不是真实的时区,不是标准化的,甚至也不是唯一的(!)。
指定适当的时区名称,格式continent/region,如America/Montreal,Africa/Casablanca或Pacific/Auckland。
在PDT这些时区中的任何一个或更多时区可能是预期的:
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZoneId z = ZoneId.of( "America/Tijuana" ) ;
ZoneId z = ZoneId.of( "America/Whitehorse" ) ;
Run Code Online (Sandbox Code Playgroud)
但是PDT可能并不意味着该区域,因为亚利桑那州不参与夏令时(DST)的废话,而D中间的则表示DST。
ZoneId z = ZoneId.of( "America/Phoenix" ) ;
Run Code Online (Sandbox Code Playgroud)
避免使用SimpleTimeFormat类,因为它是麻烦的旧日期时间类的一部分,而现在这些日期时间类已被java.time类所取代。使用DateTimeFormatter代替。
也要避免TimeZone。替换为ZoneId。
ZoneId,不是字符串有人调用我的API,并将“ PDT”作为时区传递。
更改您的API,以a ZoneId作为参数,而不是单纯的String。这样可以确保有效值并为您提供类型安全性。
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
“PDT”是太平洋夏令时的缩写。它与太平洋标准时间一起组成太平洋时区。
太平洋时区的时区标识符是"America/Los_Angeles"。你应该用它来代替。
阅读时区标签 wiki和Wikipedia 关于 tz 数据库的文章。
| 归档时间: |
|
| 查看次数: |
5403 次 |
| 最近记录: |