1. Klassen DateTimeFormatter

Specialklassen DateTimeFormatterletar sig in i Date Time API. Syftet är att göra det så enkelt som möjligt för programmerare att konvertera ett datum och en tid till det exakta format de vill ha. Och vi är glada att kunna rapportera att Javas skapare lyckades.

Att använda det är väldigt enkelt. Först måste du skapa en DateTimeFormatterklass och godkänna ett mönster som anger hur datum och tid ska visas:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Var dtffinns en DateTimeFormattervariabel. är en statisk metod för klassen. Och mönster är en sträng som anger mönstret som kommer att användas för att visa datum och tid.DateTimeFormatter.ofPattern()DateTimeFormatter

Exempel

Koda Konsolutgång
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

I exemplet ovan använder vi ofPattern()metoden för att skapa ett DateTimeFormatterobjekt baserat på mönstret. Och på nästa rad använder vi format()metoden för att konvertera ett LocalDateTimeobjekt till en sträng. Du ser resultatet på skärmen.

Du kan skicka nästan alla objekt från Date Time API till format()metoden.

Det statiska ofPattern()är också väldigt enkelt: det tar ett mönster som ett argument och returnerar ett DateTimeFormatterobjekt. Den mest intressanta delen finns i mönstret.


2. Formateringsmönster

Strängen som skickas in som ett mönster används som ett mönster när information visas. MM ersätts med månadens nummer, dd med månadens dag och åå med årets nummer. Bokstävernas fall spelar roll.

Den fullständiga tabellen för dessa tidsmönster är följande:

Brev Menande
y År
M Månad
d Dag
H Timmar
m Minuter
s Sekunder
S Tusentals sekund
n Nanosekunder.

Inte särskilt svårt att komma ihåg.

Men varför innehåller mönstret i exemplet upprepade bokstäver MM, dd och åå? Tja, det är här det blir mer intressant.

Allmän uppfattning

Antalet bokstäver påverkar textens längd. Ju fler bokstäver det finns, desto längre blir texten.

Om bokstaven H anges en gång, kommer 9 timmar att visas som 9, men om bokstaven H anges två gånger i rad, kommer 9 timmar att visas som 09.

Om bokstaven y anges 2 gånger i rad, skrivs året med 2 siffror. Om det förekommer 4 gånger i rad används 4 siffror.

Om bokstaven M anges 2 gånger i rad, skrivs månadens nummer. Om 3 gånger i rad används månadens namn (dess första 3 bokstäver). Om 4 gånger i rad används månadens fullständiga namn.

Exempel:

Koda Konsolutgång
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Komplett tabell över mönster

Hela bordet är ganska stort och superintressant:

Mönster Variationer av mönstret Exempel Beskrivning
y åååååååååå 19; 2019 År
M/L M, MM, MMM, MMMM, MMMMM 1; 01; Jan; januari; J Månad
d d, dd 9; 09 Dag
H H, HH 2; 02 Timmar
m m, mm 3; 03 Minuter
s s, ss 5; 05 Sekunder
S S, SS, SSS, ... 1; 12; 123 Tusentals sekund
n n 123456789 Nanosekunder
G G, GGGG, GGGGG AD; Anno Domini; A; Epok
Q/q q, qq, qqq, qqqq 3; 03; Q3; 3:e kvartalet Fjärdedel
w w 13 Årets vecka
W W 3 Månadens vecka
E EEE, EEEE, EEEEE mån; måndag; M Veckodag
e/c e, ee, eee, eeee, eeeee 1; 01; mån; måndag; M Veckodag
a a PM Förmiddag eller eftermiddag
h h 12 12-timmars klocka.
V VV Europa/Helsingfors Tidszon
z z zzzz EET; Östeuropeisk standardtid Tidszon
O O OOOO GMT+2; GMT+02:00 Tidszon

Förresten, det här är faktiskt inte en komplett version. Du hittar den mest kompletta versionen här .



4. Parsingtid

Klassen DateTimeFormatterär också intressant för sin förmåga att inte bara konvertera ett datum och en tid till en sträng enligt ett givet mönster, utan också att utföra den omvända operationen!

Att analysera en sträng är processen att dela upp den i meningsfulla tokens.

Så här ser det ut:

Koda Konsolutgång
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Först skapar vi ett DateTimeFormatterobjekt och ställer in mönstret som används för att analysera.

Sedan anropar vi metoden LocalDate.parse()eller LocalTime.parse()eller LocalDateTime.parse()och skickar in strängen som ska tolkas tillsammans med DateTimeFormatterobjektet, som förstår hur man tolkar den skickade texten och vilket mönster som ska användas för att göra det.

Ett annat exempel: den här gången analyserar vi tid.

Koda Konsolutgång
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59