2009-03-18 13 views
7

Conosco le classi data e ora nel JDK e i relativi metodi di formattazione associati. Potrei essere cieco, ma non riesco a trovare un insieme equivalente di classi per l'elaborazione degli intervalli di tempo. Ad esempio, vorrei visualizzare il numero di giorni per un determinato valore lungo di millisecondi. Mi rendo conto che il metodo per eseguire queste conversioni è abbastanza semplice, tuttavia quando si prende in considerazione l'internazionalizzazione e il supporto alla localizzazione, ciò diventa meno banale.Esiste un modo semplice per calcolare e formattare gli intervalli di data/ora in java?

Sono sorpreso del fatto che a JDK manchi il supporto per l'elaborazione a intervalli. Tuttavia, database come Postgresql lo supportano.

Fondamentalmente quello che sto cercando nel JDK (se sono troppo ciechi per vederlo) o in una libreria di terze parti è la seguente funzionalità:

  • metodi di calcolo Tempo. Come millisecondi a settimane o secondi a nanosecondi. Sebbene la matematica sia semplice per queste operazioni, avere un'API da passare sembra più autodocumentante per me.
  • Funzioni di formattazione dell'intervallo di tempo formattate in base alle impostazioni locali come DateFormat funziona. Ad esempio, in EN_US suppongo che 10 giorni siano ben "10 giorni" e in giapponese vorrei "10 日" restituito.

C'è qualcosa fuori o è questo un canidate per un nuovo progetto open-source?

risposta

9

Hai provato Joda Time?

+0

+1 Joda Time sembra davvero fantastico. Ha un intervallo di elaborazione oltre al buon supporto del calendario localizzato. – Elijah

+1

Questo sta diventando quasi un cliché. (Vedi i commenti su http://stackoverflow.com/questions/635935/how-can-i-calculate-a-time-span-in-java-and-format-the-output e http://stackoverflow.com/questions/643402/simple-java-date-calculations, e probabilmente ogni domanda nella sezione "related".) –

+0

Forse questo dovrebbe dire agli sviluppatori java qualcosa su un'evidente omissione nel jdk. Ehi, voi ragazzi ascoltate? – Elijah

3

uno sguardo ai http://commons.apache.org/ e la classe DateUtils ci

+0

In quale progetto è quella classe? – Elijah

+0

+1 Capito. È nel pacchetto lang. È bello sapere che è lì perché sto già importando lang nel mio attuale progetto. – Elijah

0

Sfortunatamente non c'è nulla di simile nella Libreria standard, ma come Tobiask sottolinea che gli Apache Commons hanno uno strumento utile per questo.

DurationFormatUtils ha alcuni formati predefiniti (Ora: Minuti: Secondi, ISO) e consente di specificare il proprio.

1

tl; dr

Duration.ofMillis(yourMillisecondsLongNumberGoesHere) 
     .toDays() 

Uso java.time

Le classi fastidiose vecchi data-ora sono stati soppiantati dalle classi java.time.

desidero visualizzare il numero di giorni per un dato valore lunga di millisecondi

Per un arco di tempo che coinvolge ore, minuti e secondi (e giorni definiti come blocchi di 24 ore), utilizzare la classe Duration.

Duration d = Duration.ofMillis(yourMillisecondsLongNumberGoesHere); 

Per ottenere il numero di giorni, definito definendo il numero totale di interi secondi 86,400L, chiamare toDays.

long days = d.toDays(); 

Chi java.time

Il quadro java.time è costruito in Java 8 e versioni successive.Queste classi soppiantano le fastidiose classi data legacy come java.util.Date, Calendar, & SimpleDateFormat.

Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.

Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval, YearWeek, YearQuarter e more.

Problemi correlati