1. Classe DateTimeFormatter

La DateTimeFormatterclasse speciale si fa strada nell'API Date Time. Il suo scopo è rendere il più semplice possibile per i programmatori convertire una data e un'ora nel formato esatto che desiderano. E siamo felici di annunciare che i creatori di Java hanno avuto successo.

Usarlo è molto semplice. Innanzitutto, devi creare una DateTimeFormatterclasse e passare un modello che specifichi come verranno visualizzate la data e l'ora:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Dove dtfè una DateTimeFormattervariabile. è un metodo statico della classe. E pattern è una stringa che specifica il modello che verrà utilizzato per visualizzare la data e l'ora.DateTimeFormatter.ofPattern()DateTimeFormatter

Esempi

Codice Uscita console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

Nell'esempio sopra, usiamo il ofPattern()metodo per creare un DateTimeFormatteroggetto basato sul modello. E nella riga successiva, usiamo il format()metodo per convertire un LocalDateTimeoggetto in una stringa. Vedi il risultato sullo schermo.

Puoi passare quasi tutti gli oggetti dall'API Date Time al format()metodo.

Anche lo statico ofPattern()è molto semplice: prende un modello come argomento e restituisce un DateTimeFormatteroggetto. La parte più interessante si trova nel modello.


2. Schema di formattazione

La stringa passata come modello viene utilizzata come modello durante la visualizzazione delle informazioni. MM è sostituito dal numero del mese, gg dal giorno del mese e aa dal numero dell'anno. Il caso delle lettere è importante.

La tabella completa per questi modelli temporali è questa:

Lettera Senso
si Anno
M Mese
D Giorno
H Ore
M Minuti
S Secondi
S Millesimi di secondo
N Nanosecondi.

Non particolarmente difficile da ricordare.

Ma perché lo schema nell'esempio include le lettere ripetute MM, dd e yy? Bene, qui è dove diventa più interessante.

Idea generale

Il numero di lettere influisce sulla lunghezza del testo. Più lettere ci sono, più lungo sarà il testo.

Se la lettera H viene specificata una volta, 9 ore verranno visualizzate come 9, ma se la lettera H viene specificata due volte di seguito, 9 ore verranno visualizzate come 09.

Se la lettera y viene specificata 2 volte di seguito, l'anno viene scritto utilizzando 2 cifre. Se si verifica 4 volte di seguito, vengono utilizzate 4 cifre.

Se la lettera M viene specificata 2 volte di seguito, viene scritto il numero del mese. Se 3 volte di seguito, viene utilizzato il nome del mese (le sue prime 3 lettere). Se 4 volte di seguito, viene utilizzato il nome completo del mese.

Esempio:

Codice Uscita console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Tabella completa dei modelli

La tabella completa è abbastanza grande e super interessante:

Modello Variazioni del modello Esempio Descrizione
si aa, aaaa 19; 2019 Anno
M/L M, MM, MMM, MMMM, MMMMM 1; 01; gennaio; Gennaio; J Mese
D d, gg 9; 09 Giorno
H H, HH 2; 02 Ore
M m, mm 3; 03 Minuti
S s, ss 5; 05 Secondi
S S, SS, SSS, ... 1; 12; 123 Millesimi di secondo
N N 123456789 Nanosecondi
G SOL, GGGG, GGGG ANNO DOMINI; Anno Domini; UN; Era
Q/Q q, qq, qqq, qqqq 3; 03; Q3; 3° quarto Trimestre
w w 13 Settimana dell'anno
W W 3 Settimana del mese
E EEE, EEEEE, EEEEE lun; Lunedi; M Giorno della settimana
e/c e, ee, eee, eeee, eeee 1; 01; lun; Lunedi; M Giorno della settimana
UN UN PM Antimeridiane o pomeridiane
H H 12 Orologio di 12 ore.
v VV Europa/Helsinki Fuso orario
z.z zzzzz EET; Ora standard dell'Europa orientale Fuso orario
O OOOOO GMT+2; GMT+02:00 Fuso orario

A proposito, questa non è in realtà una versione completa. Puoi trovare la versione più completa qui .



4. Tempo di analisi

La DateTimeFormatterclasse è interessante anche per la sua capacità non solo di convertire una data e un'ora in una stringa secondo uno schema dato, ma anche di eseguire l'operazione inversa!

L'analisi di una stringa è il processo di suddivisione in token significativi.

Ecco come appare:

Codice Uscita console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Innanzitutto, creiamo un DateTimeFormatteroggetto e impostiamo il modello utilizzato per l'analisi.

Quindi chiamiamo il metodo LocalDate.parse()or LocalTime.parse()o LocalDateTime.parse()e passiamo la stringa da analizzare insieme all'oggetto DateTimeFormatter, che capisce come analizzare il testo passato e quale modello dovrebbe essere usato per farlo.

Un altro esempio: questa volta analizzeremo il tempo.

Codice Uscita console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59