java中的毫秒。util。日期解释得不好
我有两个java日期,格式为yyyy-MM-dd HH:MM:ss。SSS。我需要做一个简单的算术运算。我的代码是:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String out = resu.getString(3);
Date dateOut = formatter.parse(out);
String in = resu.getString(4);
Date dateIn = formatter.parse(in);
long msDiff = dateOut.getTime() - dateIn.getTime();
如果两个日期都有3毫秒,则此操作正常,例如:
dateIn = 2015-10-14 16:32:20.037
dateOut = 2015-10-14 16:32:20.093
但是当一个日期有一个或两个数字,而不是在右边用零来完成值时,它会在左边完成,这当然会改变操作的结果。例如
dateIn = 2015-10-14 16:32:20.05
dateOut = 2015-10-14 16:32:20.067
dateOut - dateIn = 062 //this is wrong, it should be 067 - 050 = 17.
我做错了什么
我没有找到一个好的解决方案,所以我做了一个很好的解决方案。它检查毫秒数并始终返回三位
public static String completeDate (String date) {
String digits = date.substring(date.indexOf("."));
int cantDigits = digits.length();
while (cantDigits < 4){
digits = digits + "0";
cantDigits = digits.length();
}
String newDate = date.substring(0,date.indexOf(".")) + digits;
return newDate;
}
# 1 楼答案
由于小数点后的位数不同,这两个日期在技术上有不同的模式。从documentation of ^{} 开始:
鉴于此,日期
2015-10-14 16:32:20.05
被解释为2015-10-14 16:32:20.005
(分数用零填充以有三位数字),因此差值为62毫秒。您应该为这两个日期使用不同的格式化程序,或者很可能应该查看这两个值是如何插入的,以及它们具有不同格式的原因# 2 楼答案
如果通过
SimpleDateFormat
将它们转换为java.util.Date
或java.sql.Date
,则timestamp1.getTime() - timestamp2.getTime()
将产生正确的千秒数这个测试确实表明断言失败了。您可以通过在末尾添加额外的零来修复它
{a1}的样本:
我不确定JodaTime处理这个duration是否正确