Странный формат от JodaTime при расчете разницы во времени с помощью Java

Я пытаюсь найти продолжительность между двумя временами с помощью приведенного ниже кода:

                    DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
                        System.out.println(airTime1);
                        System.out.println(startTime1);
                    Minutes difference = ((Minutes.minutesBetween(startTime1,airTime1)));
                    String differenceS = String.valueOf(difference);
                        System.out.println(differenceS);
                    LocalTime remaining1 = formatter.parseLocalTime(differenceS);
                        System.out.println(remaining1);

airTime1 и startTime1 являются переменными localTime. разница должна содержать продолжительность между двумя временами. разностьS представляет собой строковое представление разницы, так как минуты не могут быть преобразованы в строку.

Когда я ввожу время в переменные, такие как 12:00 и 13:00, переменные записываются как: 12:00:00.000 и 13:00:00.000, но разностьS получает значение PT-60M, что, очевидно, вызывает ошибку. . Кто-нибудь знает, почему линия разницы минут может вычислять это значение?

Заранее спасибо!


person Will    schedule 04.05.2016    source источник
comment
У вас не работает difference.getMinutes()?   -  person Alexander    schedule 04.05.2016
comment
Вы имеете в виду использование разницы.getMinutes вот так? Разница в минутах1 = (difference.getMinutes(startTime1,airTime1));   -  person Will    schedule 04.05.2016
comment
Нет. Класс Minutes для jodatime предоставляет метод getMinutes() без каких-либо параметров, который возвращает количество минут, представленное в виде значения int. Разве это не именно то, что вы хотите?   -  person Alexander    schedule 04.05.2016
comment
Это похоже на то, что я хочу сделать. Извините за мое невежество, как мне это реализовать?   -  person Will    schedule 04.05.2016
comment
Замените последние 4 строки в вашем примере кода на System.out.println(difference.getMinutes()). Если вам нужно только абсолютное значение (неотрицательное), используйте для него Math.abs(int):int.   -  person Alexander    schedule 04.05.2016


Ответы (1)


Класс Minutes класса jodatime перезаписывает метод toString() таким образом, что он возвращает строку в формате длительности ISO8601, как указано в JavaDoc. Именно это представляет ваш PT-60M. Продолжительность -60 минут.

Если вы просто хотите распечатать необработанные минуты, ваш код может выглядеть так:

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
System.out.println(airTime1);
System.out.println(startTime1);
Minutes difference = Minutes.minutesBetween(startTime1,airTime1);
System.out.println(Math.abs(difference.getMinutes()));
person Alexander    schedule 04.05.2016
comment
Ах я вижу! Как бы вы преобразовали время из стандарта ISO в метку времени? - person Will; 04.05.2016
comment
Я не понимаю вашего вопроса. Минуты — это относительное значение времени, а Timestamp — абсолютное значение (уникальный момент времени). Вы не можете преобразовать минуты в отметку времени без указания контекста. - person Alexander; 04.05.2016
comment
Я думаю, это должна быть моя терминология. Итак, если он выводит PT60M (на этот раз положительное значение), как заставить его отображать просто 60? - person Will; 04.05.2016