gpt4 book ai didi

java - SimpleDateFormat 没有正确解析毫秒

转载 作者:行者123 更新时间:2023-12-03 23:10:21 29 4
gpt4 key购买 nike

背景:

在我的数据库表中,我有两个时间戳

timeStamp1 = 2011-08-23 14:57:26.662
timeStamp2 = 2011-08-23 14:57:26.9

当我执行“ORDER BY TIMESTAMP ASC”时,timeStamp2 被认为是更大的时间戳(这是正确的)。

需求:我需要得到这些时间戳的差异(timeStamp2 - timeStamp1)

我的实现:

public static String timeDifference(String now, String prev) {
try {
final Date currentParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(now);
final Date previousParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(prev);
long difference = currentParsed.getTime() - previousParsed.getTime();
return "" + difference;
} catch (ParseException e) {
return "Unknown";
}
}

答案应该是 238 毫秒,但返回的值是 -653 毫秒。我不确定我做错了什么。有什么建议吗?

最佳答案

您正在解析的格式和使用的格式不匹配。您期望一个三位数字的字段,但只提供一位数字。它需要 9 并假定您的意思是 009 而您想要的是 900。日期格式很复杂,当您以不同的格式证明日期时,它可能会以不同的方式解析它们。

文档说 S 表示毫秒数,该字段中的数字是 9,因此它的行为是正确的。


编辑:这个例子可能有帮助

final SimpleDateFormat ss_SSS = new SimpleDateFormat("ss.SSS");
ss_SSS.setTimeZone(TimeZone.getTimeZone("GMT"));
for (String text : "0.9, 0.456, 0.123456".split(", ")) {
System.out.println(text + " parsed as \"ss.SSS\" is "
+ ss_SSS.parse(text).getTime() + " millis");
}

打印

0.9 parsed as "ss.SSS" is 9 millis
0.456 parsed as "ss.SSS" is 456 millis
0.123456 parsed as "ss.SSS" is 123456 millis

关于java - SimpleDateFormat 没有正确解析毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20248881/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com