为什么我的java时间比较失败?

时间:2011-05-05 02:23:53

标签: java time

我有以下方法将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));

我认为会有同样的回报。我做错了什么?

2 个答案:

答案 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。