В Joda-Time 2, в чем разница между тремя видами промежутков времени:
- период
- интервал
продолжительность
Зачем нам три класса?
Какой из них работает лучше?
Почему разделение экземпляров Period, Duration или Interval не реализовано? Напримерp = p.divideBy(2);
Period
. Предложение о стандартизации такой терминологии было выдвинуто, но еще не выполнено.Ответы:
3 класса необходимы, потому что они представляют разные концепции, поэтому нужно выбирать подходящий для работы, а не относительную производительность. Из документации с добавленными мною комментариями курсивом :
Интервал в Joda-Time представляет собой интервал времени от одной миллисекунды момента на другой момент. Оба момента являются полностью указанными моментами в континууме даты и времени, с указанием часового пояса. Определено определенное время, например, это может быть интервал между 20:00 до 00:00 вчера и 09:00 по утра сегодня утром.
Продолжительность в Joda-Time представляет собой продолжительность времени , измеренное в миллисекундах. Продолжительность часто получается из интервала. т.е. мы можем вычесть начало из конца интервала, чтобы получить длительность
Период в Joda-Time представляет собой период времени , определенный в терминах полей, например, 3 года 5 месяцев 2 дней и 7 часов. Это отличается от продолжительности тем, что оно неточно с точки зрения миллисекунд. Период может быть разрешен только до точного количества миллисекунд, указав момент (включая хронологию и часовой пояс), к которому он относится. Например, рассмотрим период в 1 год, если мы добавим это к 1 января, мы всегда придем к следующему 1 января, но продолжительность будет зависеть от того, является ли промежуточный год високосным или нет. Точно так же, если мы добавим 1 месяц к 1-му числу месяца, мы прибудем 1-го числа следующего месяца, но продолжительность (в миллисекундах) будет варьироваться в зависимости от рассматриваемого месяца.
Для вопроса 3, конкретный метод деления длительности на самом деле не нужен, потому что мы всегда можем получить количество миллисекунд из продолжительности как
long
(использованиеgetMillis()
), разделить его и построить новую продолжительность (использованиеnew Duration(long duration)
).Разделение периода на самом деле не имеет реального значения, основанного на определении периода выше. например, что такое пол месяца? (его длина будет зависеть от того, какой месяц).
источник
Чтобы добавить к ответу mikej :
Joda время продолжительность является «физическим» интервалом времени; например:
12000 milliseconds
<- это продолжительностьJoda время интервал фактически пара моментов (начальный момент - конечный момент времени ). Мгновенная , опять же , «физическая» концепция, точка на временной шкале. Например (просто возможная запись):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- это интервалТаким образом, интервал может быть преобразован в длительность , но не наоборот.
Рассмотрим эти два интервала:
I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)
Как интервалы, так
I1
иI2
разные, потому что конечные точки разные; но если я конвертировать их в длительности, я получаю то же самое:3600000 milliseconds
.(Математическая аналогия: интервалы
[10,12]
и[95,97]
разные интервалы , но они имеют одинаковую длину : «длина интервала» отображается на длительность ).Наконец, период - это промежуток «гражданского времени», выраженный числом месяцев, дней, часов и т. Д. Он сам по себе не представляет «физический» интервал, поэтому его нельзя напрямую преобразовать в продолжительность (месяцы имеют переменную длину ...).
Это отвечает на вопрос 3: вы можете разделить только на два физического времени (продолжительность).
источник