尝试从格式字符串去掉小数秒。我遇到了同样的问题,但格式略有不同。我的输入格式不是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秒
- 日期格式所看到的是第二
- 一千分之二十七万一千八百一十六==的
271816/1000
271秒
- 六十〇分之二百七十一=4分钟
- 271%60 =31秒
- 17时11分15秒到17点15分46秒正是4分钟,31秒关闭
来源
2011-05-27 21:25:54
Joe
是,SimpleDateFormat的无法处理微秒。最简单的方法是去掉额外的3位数字,例如date = date.substring(0,date.length() - 4)+“Z”; – 2012-04-05 10:51:16
@scottw:除了不会总是有效的,就像你在我的例子中看到的那样,最后2个项目只有5个数字,而不是6个;所以在某些情况下,可能只有1位小数,这是完全错误的!如果你简单地截断字符串只有3个小数位,那么它也可以正常工作。在我们的例子中,我们不需要微秒(我想很多人也会同意这一点),所以事实证明,从格式字符串中删除'S'就足以从中获得可用的时间。如果你确实需要小数秒,那么是的,你必须做一些字符串操作。 – Joe 2012-04-10 19:02:26
多数民众赞成在一个好点乔 - 我的解决方案只工作,因为我正在从一个服务,总是提供小数秒的6位数(包括零填充),所以我可以摆脱字符串操作。 – 2012-05-17 19:23:42