Ответ 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)
).
Деление периода на самом деле не имеет реального значения, основанного на определении периода выше. например что полмесяца? (его длина будет зависеть от того, в каком месяце).