Відповіді:
3 класи потрібні, оскільки вони представляють різні поняття, тож це питання вибору відповідного для роботи, а не відносної ефективності. З документації із коментарями, доданими мною курсивом :
Інтервал в Joda-Time є інтервал часу від однієї мілісекунди моменту на інший момент. Обидва екземпляри є повністю визначеними екземплярами у континуумі дати, у комплекті з часовим поясом.Визначено конкретний час, наприклад, це може бути інтервал між 20: 00: 00GMT вчора та 09: 00: 00GMT сьогодні вранці.
Тривалість в 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-Time - це фактично пара моментів (start instant - end instant). миттєвим , знову ж , «фізична» концепція, точка на часовій шкалі. Наприклад (лише можливі позначення):
(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: фізичний час (тривалість) можна розділити лише на два.
Period
. Пропозиція щодо стандартизації такої термінології була піднята, але ще не виконана.