Qual è il modo migliore di utilizzare il tempo Joda per manipolare i dati mensili?

StackOverflow https://stackoverflow.com/questions/2161793

  •  23-09-2019
  •  | 
  •  

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?

È stato utile?

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);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top