Ответ 1
TL;DR
Duration.parse( "PT1H30M" ).toMillis()
ISO 8601
Не нужно изобретать свой собственный сокращенный формат. Стандарт ISO 8601 уже определяет аналогичный формат для продолжительности.
В шаблоне PnYnMnDTnHnMnS
используется P
, чтобы отметить начало, a T
, чтобы отделить любую часть лет-месяцев-дней от любой части часов-минут-секунд.
Примеры:
- Час с половиной составляет
PT1H30M
. -
P3Y6M4D
представляет "три года, шесть месяцев, четыре дня".
java.time
Классы java.time используют форматы ISO 8601 по умолчанию при разборе/генерации строк. Это включает Period
и Duration
классы для представления промежутков времени, не привязанных к временной шкале.
Duration
Duration d = Duration.ofHours( 1 ).plusMinutes( 30 );
String output = d.toString();
PT1H30M
И разбор.
Duration d2 = Duration.parse( "PT1H30M" );
Вы можете задать длительность всего миллисекунды.
long millis = d2.toMillis();
5400000
Смотрите живой код в IdeOne.com.
Но помните, что классы java.time имеют намного более точное разрешение, наносекунды. Таким образом, вы можете потерять данные при запросе миллисекунд.
Кроме того, я настоятельно рекомендую вам использовать объекты java.time и строки ISO 8601, а избегать представления значений даты и времени в виде числа миллисекунд или таких.
Period
В течение лет-месяцев-дней используйте класс Period
.
Period p = Period.parse( "P3Y6M4D" );
... и...
String output = p.toString();
P3Y6M4D
Обратите внимание на метод normalized
этого класса. Например, период "1 год и 15 месяцев" будет нормализован до "2 лет и 3 месяцев".
Также обратите внимание, что a Period
построено на LocalDate
информации. Таким образом, он не имеет понятия о часовых поясах и не знает об аномалиях, таких как летнее время (DST).
Этот класс работает с разрешением целых дней. Таким образом, класс не предоставляет явный способ подсчета миллисекунд.
О java.time
Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.
Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9 и позже
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport.
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- См. Как использовать ThreeTenABP....
Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.