Почему мое сравнение времени Java не удается? - PullRequest
6 голосов
/ 05 мая 2011

У меня есть следующий метод для преобразования строки в дату с точностью до миллисекунды

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 ]

6 голосов
/ 05 мая 2011

Путаница связана с тем, что точка - это просто разделитель токена, а не числовой десятичный разделитель.Замените символ, скажем, :, и разница станет более ясной.

То есть в регионах, где . - десятичный разделитель, численно 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
4 голосов
/ 05 мая 2011

Последнее значение равно миллисекундам. 39 больше 4. 40 больше 39.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...