【问题标题】:Unparseable Date In America/Mazatlan timezone美国/马萨特兰时区无法解析的日期
【发布时间】:2015-02-02 20:24:12
【问题描述】:

我在America/Los_Angeles TZ 上,当我尝试在America/Mazatlan TZ 中渲染午夜时,出现以下异常:

Exception in thread "main" java.text.ParseException: Unparseable date: "12:00 AM"

这是我的重现代码:

    DateFormat dateFormat = new SimpleDateFormat("h:mm a");
    TimeZone timeZone = TimeZone.getTimeZone("America/Mazatlan");
    dateFormat.setTimeZone(timeZone);
    dateFormat.setLenient(false);
    Date parse = dateFormat.parse("12:00 AM");

我知道注释掉 setLenient(false) 将解决问题,我只是不确定为什么这是一个修复,因为同一偏移量中的其他时区,例如 America/Inuvik 不会导致这样的问题。

任何帮助都会很棒。

【问题讨论】:

  • 发现了其他几个发生这种情况的 TZ:America/Hermosillo,Mexico/BajaSur,America/Bahia_Banderas

标签: java date timezone simpledateformat


【解决方案1】:

如果你删除线,

    dateFormat.setLenient(false);

你的解析对象值正在变成

     Thu Jan 01 10:00:00 EET 1970

我不知道为什么,但对于America/Mazatlan TZ,这条线正在创建异常。

对于America/Los_Angeles TZAmerica/Inuvik TZ,使用dateFormat.setLenient(false) 行不会出现任何错误,结果与America/Mazatlan TZ 相同。

    Thu Jan 01 10:00:00 EET 1970

【讨论】:

  • 谢谢。我编辑了我的问题,声明我知道宽松会导致问题,我希望将其设置为 false 会导致问题。
【解决方案2】:

那是因为你 dateFormat.setLenient(false); 和 12:00 应该是“PM”而不是“AM”

【讨论】:

  • 为什么在这个时区会有所不同?其他人没有问题,只有America/Mazatlan
  • @Nicholas,我不知道通过阅读源代码来理解这一点
  • 感谢您的帮助。我试图理解为什么它在这个时区表现得如此奇怪,而我看不到它有任何异常。
【解决方案3】:

如果不指定日期,则使用 1970-01-01。

time zone definition for Mazatlan 显示基本偏移量在 1970 年从 -08:00 切换到 -07:00。这会造成本地时间的不连续性,类似于 spring-forward daylight saving time transition 期间通常发现的那种。

从午夜到 1:00 之前,有一个小时的当地时间缺失。此范围内的时间无效。假设区域定义是正确的,这意味着时钟向前滴答:

======== UTC =======     ==== America/Mazatlan ===
1970-01-01T07:59:57Z     1969-12-31T23:59:57-08:00
1970-01-01T07:59:58Z     1969-12-31T23:59:58-08:00
1970-01-01T07:59:59Z     1969-12-31T23:59:59-08:00   
1970-01-01T08:00:00Z     1970-01-01T01:00:00-07:00  (transition!)
1970-01-01T08:00:01Z     1970-01-01T01:00:01-07:00
1970-01-01T08:00:02Z     1970-01-01T01:00:02-07:00

因此,如果您使用 SimpleDateFormat - 您应该包含日期,而不仅仅是时间。

【讨论】:

  • 哇。谢谢你告诉我这件事,似乎很奇怪。这是有道理的,因为上午 12:15 的测试也失败了。
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2021-09-22
相关资源
最近更新 更多