Joda-Time
В библиотеке Joda-Time есть классы, позволяющие разумно обрабатывать промежуток времени, позволяя избегать общения с миллисекундами.
ISO 8601
ISO 8601 Стандарт определяет формат, подобный тому, что вы пытаетесь использовать. Библиотека Joda-Time по умолчанию использует ISO 8601 для разбора и создания таких строк.
Не так тяжело работать
Итак, другими словами, вы работаете слишком трудно. Пусть Joda-Time 2.7 выполнит эту работу.
Лучше указать желаемый часовой пояс, чем полагаться неявно на текущий часовой пояс JVM, который может меняться в любой момент.
proper time zone names. Никогда не используйте 3 или 4 буквенных кода, которые не являются ни стандартизированными, ни уникальными.
DateTimeZone zone = DateTimeZone.forID ("Europe/Rome");
Поддельные данные путем захвата текущего момента, затем отключение нескольких часов, минут и секунд.
DateTime now = DateTime.now (zone);
DateTime then = now.minusHours(19).minusMinutes(5).minusSeconds (30);
Представьте промежуток времени двумя способами. Во-первых, пара фиксированных точек на временной шкале. Во-вторых, количество месяцев, дней, часов и т.д.
Interval interval = new Interval(then, now); // String representation defaults to the pair of date-time values displayed in ISO 8601 format.
Period period = interval.toPeriod(); // String representation defaults to ISO 8601 format of PnYnMnDTnHnMnS.
Обратите внимание, что Period
класс toString
метод по умолчанию генерирует строку в стандартном формате ISO 8601 похожа на вашу, PnYnMnDTnHnMnS
. P
отмечает начало, в то время как T
отделяет часть даты от части времени суток.
Дамп для консоли.
System.out.println ("interval: " + interval);
System.out.println ("period: " + period);
При запуске.
interval: 2015-04-18T12:16:55.700+02:00/2015-04-19T07:22:25.700+02:00
period: PT19H5M30S
Что вы подразумеваете под «когда я пытаюсь включить часы в мое прошедшее время»? –
Извините, я забыл форматировать в своей строке формата. Я отредактировал вопрос. – naugler
Я получаю '01h05m30s' для второго – Sionnach733