我有以下方法将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));
Run Code Online (Sandbox Code Playgroud)
按预期返回false
但是以下
Date d1 = lib.convertTime("10:30:53.39");
Date d2 = lib.convertTime("10:30:53.4");
System.out.println(d1.after(d2));
Run Code Online (Sandbox Code Playgroud)
我认为这将是同样的回报.我究竟做错了什么?
混淆是由于句点只是一个解析标记分隔符,而不是数字小数分隔符.用比如替换符号,:差异更清晰.
也就是说,在区域设置中.,小数点分隔符是数字1.5 = 1.50 = 1.500.
然而,当我们解析字符串"1.5","1.50","1.500",使用.作为标记分隔符,我们得到(1, 5),(1, 50),(1, 500).这里.没有特殊的数学意义,也可以说是一个空白.
这个简单的片段也说明了这一点:
SimpleDateFormat parser = new SimpleDateFormat("Z s#S");
System.out.println(parser.parse("GMT 1#002").getTime()); // 1002
System.out.println(parser.parse("GMT 1#02").getTime()); // 1002
System.out.println(parser.parse("GMT 1#2").getTime()); // 1002
System.out.println(parser.parse("GMT 1#20").getTime()); // 1020
System.out.println(parser.parse("GMT 1#200").getTime()); // 1200
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |