java - 将 lenient 设置为 false 时的 SimpleDateFormat 异常

标签 java datetime formatting

为什么这段代码会抛出无法解析日期的异常?

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
f.setLenient(false);
String dateStr = "2012-03-11T02:46:01.000Z";
f.parse(dateStr);

当 lenient 为真时,它工作正常。它奇怪地适用于输入日期“2012-03-01T02:46:01.000Z”,即使 lenient 为 false。 使用的默认时区:太平洋标准时间

最佳答案

因为您的默认时区不存在该时间 - 这是夏令时更改日,时间从凌晨 2:00 跳到凌晨 3:00,因此当天早上没有 2:46。 :P

由于您正在解析 UTC,请将 SimpleDateFormat 实例时区设置为 UTC,如下所示:

f.setTimeZone(TimeZone.getTimeZone("UTC"));

你的问题就会消失。

关于java - 将 lenient 设置为 false 时的 SimpleDateFormat 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574109/

相关文章:

css - 无法使用 class=pull-right 或 float :right 向右浮动 twitter Bootstrap 导航栏元素

javascript - 在 JavaScript 源代码中自动插入分号的实用程序?

java - 确保测试 jar 的命名正确

C 中从 Unix 纪元时间转换的损坏

python - SQLAlchemy 按间隔分组 30 分钟

python - 通过避免 NaN 滚动系列

java - 使用 JeMalloc 在 Java 应用程序中查找 native 内存泄漏

java - 如何解释spring security中的hasPermission?

java - 检查字符串是否是有效日期

objective-c - 将秒整数转换为 HH :MM, iPhone