Joda Time vs Java Time

19

Sebbene Joda sia ricco di funzionalità e più sofisticato rispetto all'ora Java standard, potrebbe non essere sempre la cosa migliore da usare. Come posso decidere se utilizzare Joda Time o Java Time in qualsiasi codice Java?

Esiste qualche tipo di linea guida che ci dice come scegliere quella giusta in base ai nostri requisiti?

    
posta Jedi Knight 17.03.2013 - 09:18
fonte

5 risposte

29

Joda Time è un tale miglioramento rispetto alla libreria temporale Java che è quasi sempre la scelta giusta, a parte le seguenti eccezioni:

  1. Quando è difficile o indesiderabile aggiungere dipendenze di terze parti al progetto

  2. Quando il suo uso in un'interfaccia pubblica causerebbe problemi, ad es. ottenere un ORM per gestire entrambi i campi temporali java e joda

Tuttavia, nel caso di 2) sarebbe ancora meglio usare internamente Joda se possibile.

Le cose di cui sopra meritano attenzione, ma dovrebbero essere rare. In caso di dubbio, vai con Joda.

    
risposta data 17.03.2013 - 12:42
fonte
13

Tieni presente che sul Joda-Time sito web afferma:

The standard date and time classes prior to Java SE 8 are poor. By tackling this problem head-on, Joda-Time has become the de facto standard date and time library for Java. Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310).

Il principale contributore a Joda-Time , jodastephen , è anche il principale contributore per JSR-310, come si può vedere su GitHub repository associato al link . A proposito, jodastephen ha anche un handle SO ...

Penso che sia sicuro affermare che possiamo sentirci confortati e al sicuro con il nuovo Data e ora API come previsto in Java 8 in poi.

Alcuni riferimenti aggiuntivi:

risposta data 08.01.2016 - 00:46
fonte
12

L'API della data standard Java è così fondamentalmente rotta che ho spesso considerato semplicemente l'aggiunta di Joda Time alle estensioni della libreria della JVM in modo che fosse caricata sul classpath per impostazione predefinita con il resto dell'API Java.

Se hai mai avuto il compito di integrare internazionalizzazione e fusi orari in un'applicazione Java legacy e hai tentato di utilizzare la sola API Java standard, capirai cosa intendo. Sono riuscito a trasformare migliaia di linee di codice asinine in meno di cento. L'aumento della produttività è inconcepibile.

Inoltre, l'API Date standard non è intuitiva, in quanto l'API Joda fluida può essere rilevata in poche ore o non settimane. La tua analogia con il tentativo di raggiungere l'isola a due miglia di distanza è più simile alla seguente.

1) A motorboat that will get you to the island in only 6 minutes.

Oppure ...

2) A makeshift bamboo raft tied together with vines during a hurricane steered by a crazy guy whose best friend is a volleyball.

Come altre risposte hanno dichiarato, i pochi inconvenienti come l'ORM stanno addirittura diventando inesistenti poiché Hibernate ora ha plugin che consentono di mappare le proprietà dei bean di tipo Joda ai campi data / ora del database. Anche JPA potrebbe avere una risposta per questo.

Se desideri che la tua applicazione abbia un ingombro minimalista come applicazione desktop per quanto riguarda lo spazio su disco, forse Java non è nemmeno la scelta giusta per la lingua.

    
risposta data 17.03.2013 - 14:57
fonte
8

Un altro punto: Java-Time (cioè Date ) non è ThreadSafe ma è JodaTime. Quindi JodaTime è preferito quando requisiti come

  • Ambiente multi-thread che accede alle risorse comuni
  • Sincronizzazione dell'ora centralizzata come situazioni

Oppure per semplici applicazioni Java-Time va bene.

    
risposta data 17.03.2013 - 19:44
fonte
2

Il framework java.time sostituisce entrambe le classi di data e ora legacy e Joda-Time

Aggiornamento: le vecchie classi data-ora fornite con le prime versioni di Java ora sono legacy, soppiantato ufficialmente dalle classi java.time integrate in Java 8, Java 9 e versioni successive.

Date , Calendar , SimpleDateFormat e le classi di data% di java.sql.* dovrebbero essere evitate. Non c'è mai bisogno di usare queste classi confuse, fastidiose, mal progettate. Sono completamente sostituiti dalle classi java.time. Il loro unico scopo ora è mantenere il vecchio codice esistente. Quando si interfaccia con il vecchio codice, è possibile convertire in / da java.time chiamando nuovi metodi aggiunti alle vecchie classi. Per maggiori informazioni sulla conversione, vedi: Converti java.util.Date a che tipo "java.time"? .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione a classi java.time . Il progetto Joda-Time ha ispirato il framework java.time. Entrambi sono guidati dallo stesso uomo, Stephen Colebourne . Puoi pensare a java.time come a una riscrittura / riprogettazione di Joda-Time, a tutto il nuovo codice, ma usando ciò che è stato appreso nel corso degli anni dalla costruzione della prima e completa libreria data-ora del settore.

Per ulteriori informazioni, consulta l' tutorial di Oracle . E cerca Stack Overflow per molti esempi e spiegazioni.

Gran parte della funzionalità java.time è backportata su Java 6 & 7 in ThreeTen-Backport e ulteriormente adattato a Android in ThreeTenABP (vedi Come usare ... ).

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. Potresti trovare alcune classi utili come Interval , < a href="http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html"> YearWeek , YearQuarter e more .

    
risposta data 27.11.2017 - 22:31
fonte

Leggi altre domande sui tag