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

del*_*ber 6 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));
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)

我认为这将是同样的回报.我究竟做错了什么?

pol*_*nts 6

混淆是由于句点只是一个解析标记分隔符,而不是数字小数分隔符.用比如替换符号,:差异更清晰.

也就是说,在区域设置中.,小数点分隔符是数字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)