Dovrei usare Java data e ora classi o andare con una libreria di 3a parte come Joda Time?

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

  •  09-09-2019
  •  | 
  •  

Domanda

Sto creando un sistema basato sul web che sarà utilizzato nei paesi di tutto il mondo. Un tipo di dati che devono essere conservati è date e gli orari.

Quali sono i pro ei contro di utilizzare la data e l'ora classi Java rispetto alle librerie 3a parte, come Joda tempo ? Credo che esistano queste librerie di terze parti per una buona ragione, ma non ho mai veramente paragonato io stesso.

È stato utile?

Soluzione

EDIT: Ora che Java 8 è stato rilasciato, se si può usare questo, farlo! java.time è ancora più pulito di Joda tempo, a mio avviso. Tuttavia, se sei bloccato pre-Java-8, continuate a leggere ...

Max ha chiesto per i pro ei contro di utilizzare Joda ...

Pro:

  • Funziona, molto bene. Ho il forte sospetto ci sono molti meno bug nel Joda rispetto alle librerie standard di Java. Alcuni dei bug nelle librerie Java sono davvero difficile (se non impossibile) per fissare grazie al design.
  • È stato progettato per incoraggiarvi a pensare a gestire data / ora nel modo giusto - che separa il concetto di un "ora locale" (ad esempio, "mi ha svegliato alle 7 del mattino ovunque mi trovi") e un istante nel tempo ( "I' m chiamando James a 15:00 PST, ma non può essere 3:00 dove si trova, ma è nello stesso istante ")
  • Credo che rende più facile per aggiornare il database di fuso orario, che ha cambiare relativamente frequente
  • Ha una buona storia immutabilità, il che rende la vita un molto IME più facile.
  • Leading sul da immutabilità, tutti i formattatori sono thread-safe, che è grande perché si quasi sempre vuole riutilizzare un singolo formattatore attraverso l'applicazione
  • avrete un vantaggio temporale sull'apprendimento java.time in Java 8, in quanto sono almeno un po 'simile

Contro:

  • E 'un altro API per imparare (anche se i documenti sono piuttosto buone)
  • E 'un'altra libreria per costruire e distribuire contro
  • Quando si utilizza Java 8, c'è ancora del lavoro da eseguire la migrazione abilità
  • ho non è riuscito a utilizzare il DateTimeZoneBuilder efficace in passato. Questo è un molto raro caso d'uso però.

Per rispondere a idea di costruire in modo efficace il proprio piccolo API dei oxbow_lakes', qui ci sono le mie opinioni sul perché questa è una cattiva idea:

  • E 'un lavoro. Perché fare il lavoro quando è già stato fatto per te?
  • Un nuovo arrivato per la tua squadra è molto più probabile avere familiarità con Joda che con il vostro API homegrown
  • È molto probabile che sbagliare per nulla al di là degli usi più semplici ... e anche se inizialmente pensate è sufficiente semplice funzionalità, queste cose hanno l'abitudine di crescere più complicato, una pochino alla volta. Data e ora manipolazione è difficile per fare in modo corretto. Inoltre, il built-in Java API sono difficili da usare correttamente - basta guardare le regole per il funzionamento di data / ora l'aritmetica della API calendario. Costruire nulla sopra di queste è una cattiva idea, piuttosto che utilizzando una libreria ben progettato per cominciare.

Altri suggerimenti

Beh, a meno che non si ha intenzione di aspettare per Java 8, sperando che attueranno una migliore API per la data e l'ora manipolare, sì, per favore, utilizzare Joda-time . E 'un risparmio di tempo e di evitare molti mal di testa.

La risposta è: dipende

JODA (e JSR-310) è una libreria data / ora completamente funzionale, incluso il supporto per l'utilizzo con più sistemi di calendario.

Personalmente ho trovato JODA di essere un passo troppo lungo in termini di complessità per quello che mi serve. Le 2 principali (secondo me) errori nelle classi Java Date e Calendar standard sono:

  1. Sono mutabili
  2. Si mescolano il concetto di un anno-mese-giorno da un Instant-In-Time

Anche se questi sono oggetto di JODA, lo troverete abbastanza facile da rotolare le proprie classi per YearMonthDay e Instant, che utilizzano entrambi le classi Java sotto il cofano per effettivi calcoli "calendariali". Quindi non c'è bisogno di familiarizzare con un'API di> 100 classi, una formattazione diversa / parsing meccanismo etc.

Naturalmente, se si ha bisogno di rappresentazione completa delle diverse cronologie (ad esempio ebraico) o desiderio di essere in grado di definire il proprio sistema immaginario calendario (ad esempio per un gioco che si sta scrivendo) allora forse JODA o JRS-310 è per voi . Se no, allora vorrei suggerire che a rotazione la propria è forse la strada da percorrere.

Il piombo specifiche JSR-310 è Stephen Colebourne che ha scritto JODA nel 1 ° posto, così sarà logicamente sostituisci JODA.

Tutto dipende da cosa si sta facendo con le date. Se siete semplicemente li persisti, li Java incorporato nel risale probabilmente farà tutto quello che desideri. Tuttavia, se si sta facendo vasta manipolazione di data e ora, probabilmente stai meglio con Joda.

Si dovrebbe utilizzare una libreria Joda-Time, in quanto:

  1. Joda Time sostiene il ISO 8601 standard, che è un modo standard di
    data di rappresentazione.
  2. aggiungendo e sottraendo al giorno / mese / anno è più facile in Joda-Time di java.util.date.
  3. Un inizializzazione da una data dare è molto più facile in Joda-Time.
  4. Joda Time supporta fuso orario pure.
  5. Joda-tempo ha una migliore built-in analisi. Una data sbagliata come "2014/02/31" è gettato come un errore: Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

È possibile, come questa pagina per maggiori dettagli: http://swcodes.blogspot.com/

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