1. Clasa DateTimeFormatter

Clasa specială DateTimeFormatterîși găsește drum în API-ul Date Time. Scopul său este să le fie cât mai ușor posibil pentru programatori să convertească o dată și o oră în formatul exact pe care îl doresc. Și suntem bucuroși să raportăm că creatorii Java au reușit.

Folosirea lui este foarte ușoară. Mai întâi, trebuie să creați o DateTimeFormatterclasă și să transmiteți un model care specifică modul în care va afișa data și ora:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Unde dtfeste o DateTimeFormattervariabilă. este o metodă statică a clasei. Și modelul este un șir care specifică modelul care va fi utilizat pentru afișarea datei și orei.DateTimeFormatter.ofPattern()DateTimeFormatter

Exemple

Cod Ieșire de consolă
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

În exemplul de mai sus, folosim ofPattern()metoda pentru a crea un DateTimeFormatterobiect pe baza modelului. Și în rândul următor, folosim format()metoda pentru a converti un LocalDateTimeobiect într-un șir. Rezultatul îl vedeți pe ecran.

Puteți trece aproape orice obiect din API-ul Date Time către format()metodă.

Statica ofPattern()este, de asemenea, foarte simplă: ia un model ca argument și returnează un DateTimeFormatterobiect. Cea mai interesantă parte se găsește în model.


2. Model de formatare

Șirul transmis ca model este folosit ca model la afișarea informațiilor. MM este înlocuit cu numărul lunii, dd cu ziua lunii și aa cu numărul anului. Cazul literelor contează.

Tabelul complet pentru aceste modele de timp este următorul:

Scrisoare Sens
y An
M Lună
d Zi
H Ore
m Minute
s secunde
S Miimi de secundă
n Nanosecunde.

Nu este deosebit de greu de reținut.

Dar de ce modelul din exemplu include literele repetate MM, dd și yy? Ei bine, aici devine mai interesant.

Ideea generala

Numărul de litere afectează lungimea textului. Cu cât sunt mai multe litere, cu atât textul va fi mai lung.

Dacă litera H este specificată o dată, atunci 9 ore vor fi afișate ca 9, dar dacă litera H este specificată de două ori la rând, atunci 9 ore vor fi afișate ca 09.

Dacă litera y este specificată de 2 ori la rând, atunci anul este scris folosind 2 cifre. Dacă apare de 4 ori la rând, atunci sunt folosite 4 cifre.

Dacă litera M este specificată de 2 ori la rând, atunci se scrie numărul lunii. Dacă de 3 ori la rând, atunci se folosește numele lunii (primele sale 3 litere). Dacă de 4 ori la rând, atunci se folosește numele complet al lunii.

Exemplu:

Cod Ieșire de consolă
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Tabel complet de modele

Masa plină este destul de mare și super interesantă:

Model Variații ale modelului Exemplu Descriere
y da, aaaa 19; 2019 An
M/L L, MM, MMM, MMMM, MMMMM 1; 01; Ian; Ianuarie; J Lună
d d, dd 9; 09 Zi
H H, HH 2; 02 Ore
m m, mm 3; 03 Minute
s s, ss 5; 05 secunde
S S, SS, SSS,... 1; 12; 123 Miimi de secundă
n n 123456789 Nanosecunde
G G, GGGG, GGGGG ANUNȚ; Anno Domini; A; Eră
Q/q q, q, qqq, qqq 3; 03; Q3; al 3-lea trimestru Sfert
w w 13 Săptămâna anului
W W 3 Săptămâna lunii
E EEE, EEEE, EEEEE Luni; Luni; M Zi a săptămânii
e/c e, ee, eee, eeee, eeeee 1; 01; Luni; Luni; M Zi a săptămânii
A A P.M AM sau PM
h h 12 Ceas de 12 ore.
V VV Europa/Helsinki Fus orar
z z zzzz EET; Ora standard a Europei de Est Fus orar
O O OOOO GMT+2; GMT+02:00 Fus orar

Apropo, aceasta nu este de fapt o versiune completă. Cea mai completă versiune o găsiți aici .



4. Analiza timpului

Clasa DateTimeFormattereste, de asemenea, interesantă pentru capacitatea sa de a nu numai converti o dată și oră într-un șir conform unui model dat, ci și de a efectua operația inversă!

Analizarea unui șir este procesul de împărțire a acestuia în simboluri semnificative.

Iată cum arată:

Cod Ieșire de consolă
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Mai întâi, creăm un DateTimeFormatterobiect și setăm modelul care este utilizat pentru parsare.

Apoi apelăm metoda LocalDate.parse()sau LocalTime.parse()sau LocalDateTime.parse()și trecem șirul care urmează să fie analizat împreună cu obiectul DateTimeFormatter, care înțelege cum să parseze textul transmis și ce model ar trebui folosit pentru a face acest lucru.

Un alt exemplu: de data aceasta vom analiza timpul.

Cod Ieșire de consolă
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59