首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleDateFormat -用毫秒解析时间戳

SimpleDateFormat -用毫秒解析时间戳
EN

Stack Overflow用户
提问于 2014-09-30 16:00:26
回答 2查看 3.6K关注 0票数 4

我有一个来自服务的时间戳字符串,它有6毫秒的数字:

代码语言:javascript
复制
String timestamp = "2014-09-30T15:30:00.777777";

我是这样解析它的:

代码语言:javascript
复制
String format = "yyyy-MM-dd'T'HH:mm:ss.SSS";

DateFormat df = new SimpleDateFormat(format, Locale.ENGLISH);
Date date = df.parse(timestamp);

SimpleDateFormat df2 = new SimpleDateFormat();
System.out.println(df2.format(date));

我期待看到:

代码语言:javascript
复制
"9/30/14 3:30 PM"

但我得到的是:

代码语言:javascript
复制
"9/30/14 3:42 PM"

提前12分钟。我尝试使用6毫秒数字的不同格式字符串:

代码语言:javascript
复制
String format = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS";

同样的结果。

似乎我要做的是手动将传入的时间戳字符串截断为3毫秒数字:

代码语言:javascript
复制
timestamp = timestamp.substring(0, timestamp.length()-3);

然后我得到了预期的结果。或者我可以使用一个忽略毫秒的截断格式字符串:

代码语言:javascript
复制
String format = "yyyy-MM-dd'T'HH:mm:ss";

这些是正确的解决办法吗?我是在滥用SimpleDateFormat吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-30 16:04:37

777777毫秒~ 12分钟

下午3:30 + 12分钟= 3:42

解析器工作正常。

真正的问题是:为什么源数据给出了6位数的毫秒值?它应该被解释为777.777毫秒吗?

票数 7
EN

Stack Overflow用户

发布于 2014-09-30 16:06:56

SimpleDateFormat认为毫秒部分是777777,由于它大于1000,超过1000的部分将被滚动,转换为秒和分钟。是的,在您的情况下,您应该截断输入,因为输入是而不是毫秒,而是微秒( SimpleDateFormat没有解析微秒的符号)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26125191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档