1. DateTimeFormatter-klassen

Spesialklassen DateTimeFormatterfinner veien inn i Date Time API. Hensikten er å gjøre det så enkelt som mulig for programmerere å konvertere en dato og tid til det nøyaktige formatet de ønsker. Og vi er glade for å kunne rapportere at Javas skapere lyktes.

Å bruke det er veldig enkelt. Først må du opprette en DateTimeFormatterklasse og bestå i et mønster som spesifiserer hvordan den vil vise dato og klokkeslett:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Hvor dtfer en DateTimeFormattervariabel. er en statisk metode for klassen. Og mønster er en streng som spesifiserer mønsteret som skal brukes til å vise dato og klokkeslett.DateTimeFormatter.ofPattern()DateTimeFormatter

Eksempler

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


02-22-19

I eksemplet ovenfor bruker vi ofPattern()metoden for å lage et DateTimeFormatterobjekt basert på mønsteret. Og i neste linje bruker vi format()metoden for å konvertere et LocalDateTimeobjekt til en streng. Du ser resultatet på skjermen.

Du kan overføre nesten alle objekter fra Date Time API til metoden format().

Det statiske ofPattern()er også veldig enkelt: det tar et mønster som argument og returnerer et DateTimeFormatterobjekt. Den mest interessante delen finner du i mønsteret.


2. Formateringsmønster

Strengen som sendes inn som et mønster, brukes som et mønster ved visning av informasjon. MM erstattes med månedens nummer, dd med dagen i måneden og åå med årstallet. Bokstavenes sak har betydning.

Den fullstendige tabellen for disse tidsmønstrene er denne:

Brev Betydning
y År
M Måned
d Dag
H Timer
m Minutter
s Sekunder
S Tusendeler av et sekund
n Nanosekunder.

Ikke spesielt vanskelig å huske.

Men hvorfor inkluderer mønsteret i eksemplet gjentatte bokstaver MM, dd og åå? Vel, det er her det blir mer interessant.

Generell idé

Antall bokstaver påvirker lengden på teksten. Jo flere bokstaver det er, jo lengre blir teksten.

Hvis bokstaven H angis én gang, vil 9 timer vises som 9, men hvis bokstaven H angis to ganger på rad, vil 9 timer vises som 09.

Hvis bokstaven y er spesifisert 2 ganger på rad, skrives året med 2 sifre. Hvis det forekommer 4 ganger på rad, brukes 4 siffer.

Hvis bokstaven M er spesifisert 2 ganger på rad, skrives månedens nummer. Hvis 3 ganger på rad, brukes månedens navn (de tre første bokstavene). Hvis 4 ganger på rad, brukes månedens fulle navn.

Eksempel:

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


February-22-2019


3. Komplett tabell over mønstre

Hele bordet er ganske stort og superinteressant:

Mønster Variasjoner av 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 Minutter
s s, ss 5; 05 Sekunder
S S, SS, SSS, ... 1; 12; 123 Tusendeler av et sekund
n n 123456789 Nanosekunder
G G, GGGG, GGGGG AD; Kristi fødsel; EN; Era
Q/q q, qq, qqq, qqqq 3; 03; Q3; 3. kvartal Fjerdedel
w w 1. 3 Årets uke
W W 3 Uken i måneden
E EEE, EEEE, EEEEE man; Mandag; M Ukedag
e/c e, ee, eee, eeee, eeeee 1; 01; man; Mandag; M Ukedag
en en PM Morgen eller kveld
h h 12 12-timers klokke.
V VV Europa/Helsingfors Tidssone
z z zzzz EET; Østeuropeisk standardtid Tidssone
O Å ÅÅÅ GMT+2; GMT+02:00 Tidssone

Forresten, dette er faktisk ikke en komplett versjon. Du finner den mest komplette versjonen her .



4. Parsetid

Klassen DateTimeFormatterer også interessant for sin evne til ikke bare å konvertere en dato og et klokkeslett til en streng i henhold til et gitt mønster, men også å utføre omvendt operasjon!

Å analysere en streng er prosessen med å dele den opp i meningsfulle tokens.

Slik ser det ut:

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


February-23-2019

Først lager vi et DateTimeFormatterobjekt og setter mønsteret som brukes til å analysere.

Deretter kaller vi LocalDate.parse()eller LocalTime.parse()eller- LocalDateTime.parse()metoden og sender inn strengen som skal analyseres sammen med DateTimeFormatterobjektet, som forstår hvordan man analyserer den beståtte teksten og hvilket mønster som skal brukes for å gjøre det.

Et annet eksempel: denne gangen analyserer vi tid.

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


23:59:59