【问题标题】:Is SimpleDateFormat parse - Daylight Saving Time Aware?SimpleDateFormat 解析 - 夏令时感知吗?
【发布时间】:2015-04-18 02:25:12
【问题描述】:

我想知道以下是否支持夏令时,即,如果我们设置相应国家/地区的时区,SimpleDateFormat 解析方法是否支持夏令时。

SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(TimeZone.getTimeZone("CET")); //Germany
String currentDate = sdf.format((new Date()).getTime());
currentDate = sdf.parse(currentDate);

我知道“CET”、“MST”、“EST”等是三个字母代码,不鼓励使用它,但不管是日期格式解析 DST 吗?

提前致谢。

【问题讨论】:

  • 你自己做了什么来尝试这个? TimeZone.useDaylightTime 返回什么?
  • 非常感谢 john,请检查一下。
  • 它为 CET、EST 等夏令时返回 true john,为 HST 和 JST 返回 false
  • 是的。如果你不一定相信,你可以再次尝试......
  • 从您上面的评论和下面我的回答来看,如果 EST 返回 true,我会感到惊讶。 It returns false for me。你能再检查一下吗?

标签: java date timezone dst


【解决方案1】:

在某些特定情况下,三字母代码会起作用 - 但并非所有代码都包含夏令时规则。

来自 TZ 数据库来源:

Europe:

# Zone  NAME    GMTOFF  RULES  FORMAT  [UNTIL]
Zone    WET     0:00    EU     WE%sT
Zone    CET     1:00    C-Eur  CE%sT
Zone    MET     1:00    C-Eur  ME%sT
Zone    EET     2:00    EU     EE%sT

North America:

# Zone  NAME    GMTOFF  RULES  FORMAT  [UNTIL]
Zone    EST      -5:00  -      EST
Zone    MST      -7:00  -      MST
Zone    HST     -10:00  -      HST

如您所见,欧洲文件定义了 4 个三字母区域以实现向后兼容,所有这些区域都遵循欧洲夏令时规则。

但是,北美文件只定义了其中的 3 个。值得注意的是,缺少 PST 和 CST。此外,定义的 EST 和 MST 区域没有有任何夏令时规则。

一般来说,您应该避免使用三个字母的缩写。它们不是全部支持的,不是全部支持夏令时的,一般they can be ambiguous

【讨论】:

  • 哇,我再仔细检查一遍。
猜你喜欢
  • 2016-03-06
  • 2019-09-01
  • 1970-01-01
  • 2012-05-22
  • 2018-08-20
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多