Joe..
15
尝试从格式字符串中删除小数秒.我刚遇到同样的问题,但格式略有不同.我的输入格式不是ISO格式(没有"T",没有"Z"),但症状是相同的 - 时间被一些随机数分钟和秒关闭,但其他一切都很好.这就是我的日志结果:
使用小数秒格式时:
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:15:46 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:22:07 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:08:57 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:56:14 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:39:25 EDT 2011
我通过从格式中删除小数秒来修复它.
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:11:15 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:09:37 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:05:55 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:55:05 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:38:35 EDT 2011
我认为发生的是输入字符串的"小数秒"部分太长(在OP示例中也是如此).它似乎只期望三位小数.如果你做数学(拿第一个例子):
小秒数= 0.271816秒
DateFormat看到的是271816 / 1000秒
271816/1000 == 271秒
271/60 = 4分钟
271%60 = 31秒
17:11:15到17:15:46正好是4分31秒
是的,SimpleDateFormat无法处理微秒.最简单的方法是删除额外的3位数,例如date = date.substring(0,date.length() - 4)+"Z"; (2认同)