Joda-Time: в чем разница между периодом, интервалом и продолжительностью?

В Joda-Time 2, в чем разница между тремя видами промежутков времени:

2 ответа

Решение

Необходимы 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-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: вы можете разделить физическое время только на два (продолжительность).

Другие вопросы по тегам