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

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

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"));

你的问题就会消失。

https://stackoverflow.com/questions/14574109/

相关文章:

javascript - Kendo UI 货币格式

excel - 如何通过VBA代码获取Excel 2012条件格式的色标制作的颜色

html - 如何让 IntelliJ IDEA 保持 HTML 嵌套选项卡?

list - VIM 中的格式化列表

c# - 使用 string.format 和 List.Count() 进行动态字符串格式化

java - 从java中的字符串解析带有正/负前缀的数字

c# - 如果语句突然被 Visual Studio 2010 在下一行格式化

android - 对话框中忽略的 Html 格式标记

iphone - NSDictionary `description` 格式化问题 - 将结构视为

android - Eclipse AndroidManifest.xml 格式