logo

Data e ora Java

I pacchetti java.time, java.util, java.sql e java.text contengono classi per rappresentare data e ora. Le seguenti classi sono importanti per gestire la data in Java.

API data/ora Java 8

Java ha introdotto una nuova API Data e ora a partire da Java 8. Il pacchetto java.time contiene le classi Data e ora Java 8.

API data/ora classica

Ma è utile anche la classica o vecchia API Java Date. Vediamo l'elenco delle classi classiche di Data e Ora.

Formattazione di data e ora

Possiamo formattare data e ora in Java utilizzando le seguenti classi:

API Java per data e ora

Java fornisce la funzionalità di data e ora con l'aiuto di due pacchetti java.time e java.util. Il pacchetto java.time viene introdotto in Java 8 e le classi appena introdotte tentano di superare le carenze delle classi legacy java.util.Date e java.util.Calendar.

Classi API data/ora classiche

Le classi principali prima del rilascio di Java 8 erano:

Shilpa Shetty

Java.lang.System: La classe fornisce il metodo currentTimeMillis() che restituisce l'ora corrente in millisecondi. Mostra la data e l'ora attuali in millisecondi dal 1 gennaio 1970.

java.util.Data: Viene utilizzato per mostrare un istante di tempo specifico, con unità di millisecondo.

java.util.Calendar: È una classe astratta che fornisce metodi per la conversione tra istanze e la manipolazione dei campi del calendario in modi diversi.

java.text.SimpleDateFormat: È una classe utilizzata per formattare e analizzare le date in un modo predefinito o in uno schema definito dall'utente.

java.util.TimeZone: Rappresenta una differenza di fuso orario e calcola anche l'ora legale.

Svantaggi delle API Data/Ora esistenti

    Sicurezza del filo:Le classi esistenti come Date e Calendar non forniscono la sicurezza del thread. Quindi porta a problemi di concorrenza difficili da eseguire il debug che devono essere risolti dagli sviluppatori. Le nuove API Data e Ora di Java 8 garantiscono la sicurezza del thread e sono immutabili, evitando così il problema di concorrenza da parte degli sviluppatori.Progettazione API errata:Le API classiche di data e calendario non forniscono metodi per eseguire le funzionalità quotidiane di base. Le classi Data e Ora introdotte in Java 8 sono incentrate sull'ISO e forniscono numerosi metodi diversi per eseguire operazioni relative a data, ora, durata e periodi.Gestione difficile del fuso orario:Gestire il fuso orario utilizzando le classiche classi Date e Calendar è difficile perché gli sviluppatori avrebbero dovuto scriverne la logica. Con le nuove API, la gestione del fuso orario può essere eseguita facilmente con le API Local e ZonedDate/Time.

Nuova API Data/Ora in Java 8

La nuova API della data aiuta a superare gli inconvenienti sopra menzionati con le classi legacy. Comprende le seguenti classi:

java.time.LocalDate: Rappresenta un anno-mese-giorno nel calendario ISO ed è utile per rappresentare una data senza ora. Può essere utilizzato per rappresentare solo informazioni sulla data, ad esempio una data di nascita o una data di matrimonio.

java.time.LocalTime: Si tratta solo in tempo. È utile per rappresentare l'ora del giorno basata sull'uomo, come gli orari dei film o gli orari di apertura e chiusura della biblioteca locale.

java.time.LocalDateTime: Gestisce sia la data che l'ora, senza fuso orario. È una combinazione di LocalDate con LocalTime.

java.time.ZonedDateTime: Combina la classe LocalDateTime con le informazioni sulla zona fornite nella classe ZoneId. Rappresenta un timestamp completo della data insieme alle informazioni sul fuso orario.

java.time.OffsetTime: Gestisce l'ora con una differenza di fuso orario corrispondente da Greenwich/UTC, senza un ID di fuso orario.

java.time.OffsetDateTime: Gestisce una data e un'ora con la differenza di fuso orario corrispondente rispetto a Greenwich/UTC, senza un ID di fuso orario.

java.time.Clock : Fornisce l'accesso all'istante, alla data e all'ora correnti in qualsiasi fuso orario. Sebbene l'uso della classe Clock sia facoltativo, questa funzionalità ci consente di testare il codice per altri fusi orari o utilizzando un orologio fisso, dove l'ora non cambia.

java.time.Instant: Rappresenta l'inizio di un nanosecondo sulla linea temporale (da EPOCH) ed è utile per generare un timestamp per rappresentare il tempo della macchina. Un istante che si verifica prima dell'epoca ha un valore negativo, mentre un istante che si verifica dopo l'epoca ha un valore positivo.

java.time.Durata: Differenza tra due istanti e misurata in secondi o nanosecondi e non utilizza costrutti basati sulla data come anni, mesi e giorni, sebbene la classe fornisca metodi che convertono in giorni, ore e minuti.

java.time.Periodo: Viene utilizzato per definire la differenza tra le date in valori basati sulla data (anni, mesi, giorni).

java.time.ZoneId: Indica un identificatore di fuso orario e fornisce regole per la conversione tra un Instant e un LocalDateTime.

java.time.ZoneOffset: Descrive un fuso orario diverso dall'ora di Greenwich/UTC.

java.time.format.DateTimeFormatter: Viene fornito con vari formattatori predefiniti oppure possiamo definirne uno nostro. Ha il metodo parse() o format() per l'analisi e la formattazione dei valori di data e ora.