Risposte:
Sono necessarie 3 classi perché rappresentano concetti diversi, quindi si tratta di scegliere quella appropriata per il lavoro anziché le prestazioni relative. Dalla documentazione con commenti aggiunti da me in corsivo :
Un intervallo in Joda-Time rappresenta un intervallo di tempo da un millisecondo a un altro istante. Entrambi gli istanti sono istanti completamente specificati nel continuum datetime, completi di fuso orario. Si definiscono orari specifici, ad esempio questo potrebbe essere l'intervallo tra le 20:00 di 00:00 di ieri e le 09:00 di 00:00 di questa mattina.
Una durata in Joda-Time rappresenta una durata misurata in millisecondi. La durata è spesso ottenuta da un intervallo. cioè possiamo sottrarre l'inizio dalla fine di un intervallo per ricavare una durata
Un periodo in Joda-Time rappresenta un periodo di tempo definito in termini di campi, ad esempio 3 anni 5 mesi 2 giorni e 7 ore. Ciò differisce da una durata in quanto è inesatto in termini di millisecondi. Un periodo può essere risolto in un numero esatto di millisecondi specificando l'istante (compresi cronologia e fuso orario) a cui è relativo. ad es. considerare il periodo di 1 anno, se lo aggiungiamo al 1 ° gennaio arriveremo sempre al 1 ° gennaio successivo, ma la durata dipenderà dal fatto che l'anno intermedio sia un anno bisestile o meno. Allo stesso modo se aggiungiamo 1 mese al 1 ° di un mese, arriveremo al 1 ° del mese successivo ma la durata (in millisecondi) varierà in base al mese in questione
Per la domanda 3, Un metodo specifico per dividere una durata non è realmente necessario perché possiamo sempre ottenere il numero di millisecondi dalla durata come long
(usando getMillis()
), dividerlo e costruire una nuova durata (usando new Duration(long duration)
).
La divisione di un periodo non ha davvero un significato reale basato sulla definizione di un periodo precedente. ad es. che è mezzo mese? (la sua durata dipenderà da quale mese).
Per aggiungere alla risposta di Mike :
Una durata Joda-Time è un intervallo di tempo "fisico"; per esempio:
12000 milliseconds
<- questa è una durata
Un intervallo Joda-Time è in realtà una coppia di istanti (inizio istantaneo - fine istantaneo). Un istante è, ancora una volta, un concetto "fisico", un punto nella sequenza temporale. Ad esempio (solo una possibile notazione):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- questo è un intervallo
Un intervallo , quindi, può essere convertito in una durata , ma non il contrario.
Considera questi due intervalli:
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)
Come intervalli I1
e I2
sono diversi, perché i punti finali sono diversi; ma se li converto a durate, ottengo la stessa cosa: 3600000 milliseconds
.
(Analogia matematica: gli intervalli [10,12]
e [95,97]
sono intervalli diversi , ma hanno la stessa lunghezza : la "lunghezza intervallo" è mappata alla durata ).
Infine, un periodo è un intervallo di "tempo civile", espresso in un numero di mesi, giorni, ore, ecc. Non rappresenta di per sé un intervallo "fisico", quindi non può essere convertito direttamente in un durata (i mesi hanno lunghezze variabili ...).
Questo risponde alla domanda 3: puoi dividere solo per due un tempo fisico (una durata).
Period
. Una proposta per standardizzare tale terminologia è stata sollevata ma non ancora realizzata.