我有一个来自服务的时间戳字符串,它有6毫秒的数字:
String timestamp = "2014-09-30T15:30:00.777777";我是这样解析它的:
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));我期待看到:
"9/30/14 3:30 PM"但我得到的是:
"9/30/14 3:42 PM"提前12分钟。我尝试使用6毫秒数字的不同格式字符串:
String format = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS";同样的结果。
似乎我要做的是手动将传入的时间戳字符串截断为3毫秒数字:
timestamp = timestamp.substring(0, timestamp.length()-3);然后我得到了预期的结果。或者我可以使用一个忽略毫秒的截断格式字符串:
String format = "yyyy-MM-dd'T'HH:mm:ss";这些是正确的解决办法吗?我是在滥用SimpleDateFormat吗?
谢谢
发布于 2014-09-30 16:04:37
777777毫秒~ 12分钟
下午3:30 + 12分钟= 3:42
解析器工作正常。
真正的问题是:为什么源数据给出了6位数的毫秒值?它应该被解释为777.777毫秒吗?
发布于 2014-09-30 16:06:56
SimpleDateFormat认为毫秒部分是777777,由于它大于1000,超过1000的部分将被滚动,转换为秒和分钟。是的,在您的情况下,您应该截断输入,因为输入是而不是毫秒,而是微秒( SimpleDateFormat没有解析微秒的符号)。
https://stackoverflow.com/questions/26125191
复制相似问题