我有以下方法将String转换为具有毫秒粒度的日期
public Date convertTime(String time) {
SimpleDateFormat parser = new SimpleDateFormat("HH:mm:ss.S");
try {
return parser.parse(time);
}
catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
Date d1 = lib.convertTime("10:30:53.39");
Date d2 = lib.convertTime("10:30:53.40");
System.out.println(d1.after(d2));
按预期返回false
但是以下
Date d1 = lib.convertTime("10:30:53.39");
Date d2 = lib.convertTime("10:30:53.4");
System.out.println(d1.after(d2));
我认为会有同样的回报。我做错了什么?
答案 0 :(得分:6)
混淆是因为句点只是一个解析标记分隔符,而不是数字小数分隔符。用:
代替符号,差异更清晰。
也就是说,在.
是小数点分隔符的区域设置中,以数字1.5 = 1.50 = 1.500
为单位。
但是,当我们解析字符串"1.5"
,"1.50"
,"1.500"
时,使用.
作为令牌分隔符,我们得到(1, 5)
,{{1 },(1, 50)
。 (1, 500)
在这里没有特殊的数学意义,也可以说是一个空格。
这个简单的片段也说明了这一点:
.
答案 1 :(得分:4)
最后一个值是毫秒.39大于4. 40大于39。