Есть ли простой способ для расчета и форматирования интервалов времени / даты в Java? - PullRequest
7 голосов
/ 18 марта 2009

Я знаком с классами даты и времени в JDK и связанными с ними методами форматирования. Я могу быть слепым, но я не могу найти эквивалентный набор классов для обработки временных интервалов. Например, я хотел бы отобразить количество дней для данного длинного значения в миллисекундах. Я понимаю, что способ сделать эти преобразования довольно прост, однако, когда вы учитываете поддержку интернационализации и локализации, это становится менее тривиальным.

Я удивлен, что в JDK отсутствует поддержка интервальной обработки. Однако базы данных, такие как Postgresql , поддерживают его.

В основном то, что я ищу в JDK (если я слишком слеп, чтобы видеть это) или в сторонней библиотеке, - это следующая функциональность:

  • Методы расчета времени. Например, от миллисекунд до недель или секунд до наносекунд. Хотя математика проста для этих операций, мне кажется, что иметь API для самодокументирования.
  • Функции форматирования временного интервала, которые форматируют в соответствии с переданным Locale, как DateFormat работает. Например, в EN_US я бы предположил, что 10 дней - это «10 дней», а на японском я бы хотел, чтобы «10 returned» вернулось.

Есть ли что-нибудь в этом роде или это новый вариант проекта с открытым исходным кодом?

Ответы [ 4 ]

9 голосов
/ 18 марта 2009

Вы пробовали Joda Time ?

3 голосов
/ 18 марта 2009

посмотрите на http://commons.apache.org/ и класс DateUtils там

1 голос
/ 28 апреля 2017

ТЛ; др

Duration.ofMillis( yourMillisecondsLongNumberGoesHere )
        .toDays()

Использование java.time

Мучительные старые классы даты и времени были вытеснены классами java.time.

Я бы хотел отобразить количество дней для данного длинного значения в миллисекундах

Для промежутка времени, включающего часы, минуты и секунды (и дни, определенные как куски по 24 часа), используйте класс Duration.

Duration d = Duration.ofMillis( yourMillisecondsLongNumberGoesHere );

Чтобы узнать количество дней, определяемое путем определения общего количества целых секунд в 86 400 л, позвоните по номеру toDays.

long days = d.toDays();

О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , в настоящее время находящийся в режиме обслуживания , рекомендует выполнить переход на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 18 марта 2009

К сожалению, в стандартной библиотеке нет ничего подобного, но, как указывает Тобиаск, у Apache Commons есть полезный инструмент для этого.

DurationFormatUtils имеет несколько предопределенных форматов (Hour: Minutes: Second, ISO) и позволяет вам указать свой собственный.

...