Domanda

Ogni volta che ho bisogno di lavorare con la data e/o timstamps in Java mi sento sempre come sto facendo qualcosa di sbagliato e che spendono ore e ore cercando di trovare un modo migliore di lavorare con le Api, senza dover codice la mia Data e l'Ora di classi di utilità.Ecco un paio di cose fastidiose che ho appena imbattuto in:

  • Basato su 0 mesi.Mi rendo conto che la pratica migliore è quello di usare il Calendario.SETTEMBRE invece di 8, ma è fastidioso che 8 rappresenta settembre e non ad agosto.

  • Ottenere una data senza un timestamp.Ho sempre bisogno di un programma di utilità che azzera il timestamp parte della data.

  • So che ci sono altri problemi che ho avuto in passato, ma non riesco a ricordare.Sentitevi liberi di aggiungere più le risposte.

Allora la mia domanda è ...Cosa terzi Api utilizzate per semplificare Java utilizzo di Data e Ora modifica, se esiste?Ogni pensiero su utilizzando Joda?Nessuno sembrava più vicina a JSR-310 Data e l'Ora di API?

È stato utile?

Soluzione

Questo post ha una buona discussione sul confronto tra il Java Data/Ora di API vs JODA.

Io personalmente uso Calendario Gregoriano e SimpleDateFormat ogni volta che ho bisogno di modificare le date/orari in Java.Non ho mai avuto problemi nell'utilizzo di Java API e trovo molto facile da usare, quindi non hanno guardato in tutte le alternative.

Altri suggerimenti

java.tempo

Java 8 e versioni successive, ora include il java.tempo quadro.Ispirato Joda Tempo, definito da JSR 310, estesa dal ThreeTen-Extra progetto.Vedere il Tutorial.

Questo quadro soppianta il vecchio java.util.Data/.Calendario delle lezioni.Metodi di conversione permette di convertire avanti e indietro per lavorare con il vecchio codice non ancora aggiornata di java.tipi di orario.

Le classi principali sono:

Questo quadro risolve un paio di problemi che avete elencato.

Basato su 0 mesi

I numeri del mese sono 1-12 in java.tempo.

Ancora meglio, di un Enum (Month) fornisce un'istanza di un oggetto per ogni mese dell'anno.Quindi è necessario non dipendono dai numeri "magici" nel codice come 9 o 10.

if ( theMonth.equals ( Month.OCTOBER ) ) {  …

Inoltre, che l'enumerazione include alcune utili metodi di utilità come ad esempio un mese localizzato nome.

Se non si ha familiarità con Java enumerazioni, leggere le Tutorial e studiare.Sono sorprendentemente maneggevole e potente.

Una data senza tempo

Il LocalDate classe rappresenta una data valore solo, senza orario, senza fuso orario.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Nota che per la determinazione di una data richiede un fuso orario.Un nuovo giorno precedente a Parigi che a Montréal, dove è ancora in ‘ieri’.Il ZoneId classe rappresenta un fuso orario.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );

Allo stesso modo, c'è un LocalTime classe per un tempo di giorno non è ancora legato a una data o orario.


In java.tempo

Il java.tempo quadro è costruito in Java 8 e versioni successive.Queste classi soppiantare il vecchio fastidioso legacy data di classi a tempo come java.util.Date, Calendar, & SimpleDateFormat.

Il Joda Tempo il progetto, ora in modalità di manutenzione, consigli di migrazione per il java.tempo classi.

Per saperne di più, vedere il Oracle Tutorial.E di ricerca di Overflow dello Stack per molti esempi e spiegazioni.Specifica JSR 310.

Dove ottenere il java.classi a tempo?

Il ThreeTen-Extra il progetto si estende java.ora con le classi aggiuntive.Questo progetto è un terreno di prova per eventuali future integrazioni di java.tempo.Si possono trovare alcune classi utili come l' Interval, YearWeek, YearQuarter, e più.

L'Apache Commons Lang progetto ha un DateUtils classe che esegue utile le operazioni di Data.

Io uso DateUtils.truncate() un lotto, che "azzerare" le parti della Data per voi (utile se volete che il vostro Data oggetto, per esempio, rappresentano una data e non includono informazioni in tempo).Ogni metodo funziona per entrambi Date e Calendar gli oggetti di troppo.

http://commons.apache.org/lang/

Sto usando Joda in esclusiva per tre anni, e sarebbe sicuramente lo consiglio - ha l'intera area coperta, con un'interfaccia che 'fa quello che dice'.

Joda può apparire complessa quando si avvia, come ad esempio non ha concetti di periodi, la durata e gli intervalli che sembrano una sorta di simile, ma si può iniziare semplicemente sostituendo i org.joda.time.DateTime (o org.joda.time.DateMidnight) per java.util.Date nel tuo codice, e attaccare con molti metodi utili che quelle classi contengono, prima di capire le altre aree.

Im utilizzando GregorianCalendar - sempre e ovunque.Java semplice.util.La data è troppo complesso, sì.

Quindi, il mio consiglio è di usare GC, la sua semplice

E ' lo stesso in javascript.Qualcuno deve aver fumato qualcosa quando pensano che sia una buona idea lasciare 2008 media anno 2008, 31 a significare che il 31 ° giorno del mese, e - questa è la parte migliore - 11 a dire il 12 ° mese.

D'altra parte, hanno preso due dei tre.

La cosa che mi fa con Java è la data della libreria di tempo.Non ho mai usato Joda, solo un breve occhiata, sembra una buona implementazione, e se ho capito JSR-130 correttamente le sue prese di conoscenza da Joda e, infine, di avere incluso nel JavaSE.

Molto spesso per il passato, I progetti in cui è avvolto il Java data di oggetti, che, di per sé, è piuttosto un compito.Per poi usare il wrapper per la modifica di data.

Data di Api sono molto difficili da progettare, soprattutto se hanno a che fare con la localizzazione.Prova a rotolare il vostro proprio e vedere, vale la pena fare almeno una volta.Il fatto che Joda è stato in grado di fare un buon lavoro è un vero e proprio credito per i suoi sviluppatori.Per rispondere alla tua domanda, ho sentito niente ma le cose buone che la biblioteca, anche se non ho mai giocato con me.

Un sacco di programmatori iniziare con l'uso di Data, che ha numerosi deprecato costruttori di overload (il che rende di difficile utilizzo), ma una volta a capire GregorianCalendar diventa un po ' più facile da gestire.L'esempio qui è molto utile:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html

E ' davvero semplice per scrivere la tua data di API che si trova sulla cima di materie prime classi Java, la Data e il Calendario.Fondamentalmente sia la data e il Calendario soffrono per il fatto che stanno cercando di stipare due concetti in una classe:

  1. Data (es.Anno-Mese-Giorno)
  2. Istantanea (cioècurrentTimeMillis)

Quando si capisce questo, si tratterà solo di rivoluzionare il modo in cui si gestisce data-come concetti nel codice.Le cose saranno più semplici e chiare, meglio.In ogni senso!

Per me, Joda è complicato, almeno per la stragrande maggioranza delle finalità e io in particolare non piace il fatto che sono andati contro standard di Java forme, un esempio di come si esegue l'analisi e il formato delle date.Stefano Colebourne, il ragazzo dietro di JODA, è la spec piombo di JSR-310 e questo, soffre degli stessi problemi, imho (ho seguito e contribuito alle discussioni degli ultimi anni).

Fare da soli;è facile.Basta compilare le seguenti classi:MyDate (confezionamento anno-mese-giorno), il Mese (un enum), TimeOfDay (ore-min-sec-millis), DayOfWeek (enum), Immediato (confezionamento di un tempo).Sempre prendere in considerazione il tempo-zone di conversione tra gli Istanti e le Date.

Se questo sembra scoraggiante, è possibile utilizzare il Calendario e SimpleDateFormat sotto il cofano.Lo puoi fare in un giorno e non ve ne pentirete.

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