Qual è il modo migliore di utilizzare il tempo Joda per manipolare i dati mensili?
Domanda
Sto cercando di lavorare con un timeseries di dati mensili. Cioè, c'è un valore per ogni mese, e nessuna data specifica (o tempo) ad esso associati.
avrei potuto arbitrariamente fissato il giorno, l'ora ad un certo costante (ad es mezzanotte del primo giorno del mese) poi utilizzato un java.util.date
o joda DateTime
ma ho deciso di provare a fare questo tipo all'interno del sistema Joda.
Il mio primo passo è stato quello di creare una classe che si estende YearMonth
AbstractPartial
(per analogia a LocalDate
). Ora ho raggiunto il passo successivo di cercare di incrementare un YearMonth
da un certo numero di mesi. Potrei scrivere il codice stesso (aggiungendo% 12), ma io preferisco usare un modo stile Joda di fare questo.
Che codice dovrei scrivere, e dove dovrebbe vivere in modo da poter, ad esempio aggiungere un 13 mesi o due anni Period
alla mia classe YearMonth
? O sto andando giù un cattivo traccia?
Soluzione
Lo svn Joda-tempo ha una YearMonth
di classe, pronto per v2.0.
Altri suggerimenti
anno / mese matematica deve essere fatto nel seguente modo:
ym = (year*12+month)
Do your math on ym. Add months or years, or whatever
year = ym / 12
month = ym % 12
Non c'è vera alternativa. Questo è dimostrabilmente corretto e nessuna alternativa sarà effettivamente essere più semplice. Alcune lingue (come Python) hanno una funzione divmod
che combina le ultime due righe di codice, ma questo non cambia l'essenza.
Hai unità (mesi) che si mostrerà al popolo come anno-mese. Potrebbe anche essere Yards-piedi o ore-minuti o qualsiasi altra conversione semplice da una base in due parti.
DateTime currentInstant = nuovo DateTime ();
// aggiunge un mese
currentInstant = currentInstant.plusMonths (1);
// aggiungere 2Y + 13M => 3Y 1M
Periodo incPeriod = nuovo Periodo () plusYears (2) .plusMonths (13).;
currentInstant = currentInstant.plus (incPeriod);