Преобразование JodaTime Duration в Java 8 time Duration: getStandardMinutes и другие методы - PullRequest
2 голосов
/ 04 ноября 2019

Мы пытаемся преобразовать продукт, который мы написали с использованием библиотеки Joda-Time , во время Java из-за некоторых часовых поясов в нашей стране. (Летнее время DST никогда не бывает согласованным, и Joda-Time требует специальных манипуляций и использования смещений, чтобы заставить его работать должным образом.)

Я работаю с Duration* Joda-Time. 1007 *. Существует ряд методов, таких как getStandardMinutes.

Существует ли простой способ достижения той же функциональности на Java 8+ java.time Duration? На основании кода и комментариев я предполагаю, что Duration::toMinutes не обязательно вернет желаемое значение.

Ответы [ 2 ]

4 голосов
/ 04 ноября 2019

В классе Java 8 Duration продолжительность не содержит контрольной даты. Поэтому все минуты, которые вы извлечете, являются стандартными минутами. В JodaTime комментарии для getStandardXXX явно указывают, что длительность предполагает длительность дня по умолчанию (24 часа / сутки, 60 минут / час, 60 секунд / мин ...). Однако это имеет значение только в том случае, если вы хотите применить длительность к контрольному (дате) времени (например, добавить это Duration к этому DateTime), и в этом случае добавьте «день» к отображению датылетнее время может иметь неожиданные последствия (например, смещение часов). Однако для объекта Duration это не имеет значения, поскольку оно фактически представляет просто длительность в наносекундах в «реальном времени», не учитывая часовые пояса и т. П.

По сути, вы можете использовать toMinutes(), чтобы получитьточное количество минут в виде значения long.

Из javadoc:

Получает количество минут в этой продолжительности.

Возвращает общее количествоминут в продолжительности путем деления количества секунд на 60.

Этот экземпляр является неизменным и не зависит от вызова этого метода.

2 голосов
/ 05 ноября 2019

java.time.Duration = количество наносекунд

Поскольку TreffnonX уже ответил , Duration в java.time представляет промежуток времени, не прикрепленныйна шкалу времени 24 часа (без учета календаря), часы, минуты, секунды и доли секунды. Другими словами, java.time.Duration - это просто число наносекунд с помощью ряда удобных методов.

Классы промежутка времени

Вот графическая таблица, которую я создал, чтобы помочь вам ориентироваться в различных классах промежутка времени, встроенных в Java 8 и более поздние версии, плюс классы из ThreeTen-Extra библиотека.

К вашему сведению, все три проекта ( Joda-Time , java-time и ThreeTen-Extra ) возглавляет один и тот же человек, Стивен Коулборн .

Table of span-of-time classes in Java and in the ThreeTen-Extra project

...