1. DateTimeFormatter klasse

Specialklassen DateTimeFormatterfinder vej ind i Date Time API. Dens formål er at gøre det så nemt som muligt for programmører at konvertere en dato og tid til det nøjagtige format, som de ønsker. Og vi er glade for at kunne rapportere, at Javas skabere lykkedes.

Det er meget nemt at bruge det. Først skal du oprette en DateTimeFormatterklasse og bestå i et mønster, der specificerer, hvordan det vil vise dato og klokkeslæt:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Hvor dtfer en DateTimeFormattervariabel. er en statisk metode i klassen. Og mønster er en streng, der angiver det mønster, der skal bruges til at vise dato og klokkeslæt.DateTimeFormatter.ofPattern()DateTimeFormatter

Eksempler

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


02-22-19

I eksemplet ovenfor bruger vi ofPattern()metoden til at skabe et DateTimeFormatterobjekt baseret på mønsteret. Og i næste linje bruger vi format()metoden til at konvertere et LocalDateTimeobjekt til en streng. Du ser resultatet på skærmen.

Du kan overføre næsten ethvert objekt fra Date Time API til format()metoden.

Det statiske ofPattern()er også meget simpelt: det tager et mønster som argument og returnerer et DateTimeFormatterobjekt. Den mest interessante del findes i mønsteret.


2. Formateringsmønster

Den streng, der sendes ind som et mønster, bruges som et mønster ved visning af information. MM erstattes af månedens nummer, dd af månedens dag og åå med årets nummer. Bogstavernes sag har betydning.

Den fulde tabel for disse tidsmønstre er denne:

Brev Betyder
y År
M Måned
d Dag
H Timer
m Referater
s Sekunder
S Tusindedele af et sekund
n Nanosekunder.

Ikke specielt svært at huske.

Men hvorfor indeholder mønsteret i eksemplet gentagne bogstaver MM, dd og åå? Nå, det er her, det bliver mere interessant.

Generel idé

Antallet af bogstaver påvirker længden af ​​teksten. Jo flere bogstaver der er, jo længere bliver teksten.

Hvis bogstavet H er angivet én gang, vil 9 timer blive vist som 9, men hvis bogstavet H er angivet to gange i træk, vil 9 timer blive vist som 09.

Hvis bogstavet y er angivet 2 gange i træk, skrives året med 2 cifre. Hvis det forekommer 4 gange i træk, så bruges 4 cifre.

Hvis bogstavet M er angivet 2 gange i træk, skrives månedens nummer. Hvis 3 gange i træk, bruges månedens navn (dets første 3 bogstaver). Hvis 4 gange i træk, så bruges månedens fulde navn.

Eksempel:

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


February-22-2019


3. Komplet tabel over mønstre

Det fulde bord er ret stort og super interessant:

Mønster Variationer af mønsteret Eksempel Beskrivelse
y åå, åååå 19; 2019 År
M/L M, MM, MMM, MMMM, MMMMM 1; 01; Jan; Januar; J Måned
d d, dd 9; 09 Dag
H H, HH 2; 02 Timer
m m, mm 3; 03 Referater
s s, ss 5; 05 Sekunder
S S, SS, SSS, ... 1; 12; 123 Tusindedele af et sekund
n n 123456789 Nanosekunder
G G, GGGG, GGGGG AD; Anno Domini; EN; Æra
Q/q q, qq, qqq, qqqq 3; 03; Q3; 3. kvartal Kvarter
w w 13 Årets uge
W W 3 Uge i måneden
E EJ, EEEE, EEEEE man; Mandag; M Dag i ugen
e/c e, ee, eee, eeee, eeeee 1; 01; man; Mandag; M Dag i ugen
-en -en OM EFTERMIDDAGEN Am eller PM
h h 12 12-timers ur.
V VV Europa/Helsinki Tidszone
z z zzzz EET; Østeuropæisk standardtid Tidszone
O O OOOO GMT+2; GMT+02:00 Tidszone

Forresten, dette er faktisk ikke en komplet version. Du kan finde den mest komplette version her .



4. Parsing tid

Klassen DateTimeFormatterer også interessant for dens evne til ikke kun at konvertere en dato og et klokkeslæt til en streng i henhold til et givet mønster, men også til at udføre den omvendte operation!

Parsing af en streng er processen med at opdele den i meningsfulde tokens.

Sådan ser det ud:

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


February-23-2019

Først opretter vi et DateTimeFormatterobjekt og sætter det mønster, der bruges til at analysere.

Derefter kalder vi LocalDate.parse()eller LocalTime.parse()eller LocalDateTime.parse()metoden og sender strengen, der skal parses sammen med DateTimeFormatterobjektet, som forstår, hvordan man analyserer den beståede tekst, og hvilket mønster der skal bruges til at gøre det.

Et andet eksempel: denne gang analyserer vi tid.

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


23:59:59