В Joda-Time 2 в чем разница между тремя типами временных интервалов:
Joda-Time: какая разница между периодом, интервалом и продолжительностью?
Ответ 1
3 класса необходимы, потому что они представляют разные концепции, поэтому нужно выбрать подходящую для работы, а не относительную производительность. Из документа с комментариями, добавленными мной курсивом:
интервал в Joda-Time представляет собой интервал времени от одного миллисекундного момента до другого момента. Оба момента являются полностью определенными моментами в континууме datetime с часовым поясом. Определенные времена определены, например. это может быть интервал между 20: 00: 00GMT вчера и 09: 00: 00GMT сегодня утром.
A duration в Joda-Time представляет собой продолжительность времени, измеренную в миллисекундах. Длительность часто получается из интервала. то есть мы можем вычесть начало с конца интервала, чтобы получить продолжительность
A period в Joda-Time представляет собой период времени, определенный по полям, например, 3 года 5 месяцев 2 дня и 7 часов. Это отличается от продолжительности тем, что оно неточно в миллисекундах. Период может быть разрешен только к точному числу миллисекунд, указав момент (включая хронологию и часовой пояс) относительно. например рассмотрим период 1 год, если добавить это к 1 января, мы всегда прибудем на следующий 1 января, но продолжительность будет зависеть от того, является ли промежуточный год високосным годом или нет. Аналогично, если мы добавим 1 месяц к 1-му месяцу, мы прибудем в 1-й из следующего месяца, но продолжительность (в миллисекундах) будет меняться в зависимости от соответствующего месяца.
Для вопроса 3 конкретный метод деления продолжительности на самом деле не нужен, потому что мы всегда можем получить количество миллисекунд от продолжительности как long
(используя getMillis()
), делить его и построить новую продолжительность ( используя new Duration(long duration)
).
Деление периода на самом деле не имеет реального значения, основанного на определении периода выше. например что полмесяца? (его длина будет зависеть от того, в каком месяце).
Ответ 2
Чтобы добавить к ответ mikej:
A Joda-Time продолжительность - это "физический" интервал времени; например:
12000 milliseconds
< - это продолжительность
Время Joda-Time на самом деле представляет собой пару мгновений (начало мгновенного момента). мгновенный - это опять-таки "физическая" концепция, точка на временной шкале. Например (только возможные обозначения):
(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: вы можете разделить только на два физическое время (продолжительность).