1. DateTimeFormatter osztály

A speciális DateTimeFormatterosztály megtalálta az utat a Date Time API-ban. Célja, hogy a programozók a lehető legkönnyebben konvertálhassák a dátumot és az időt a kívánt formátumra. Örömmel jelentjük, hogy a Java alkotóinak sikerült.

Használata nagyon egyszerű. Először is létre kell hoznia egy DateTimeFormatterosztályt, és át kell adnia egy mintát, amely meghatározza, hogyan jelenítse meg a dátumot és az időt:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Hol dtfvan egy DateTimeFormatterváltozó. az osztály statikus metódusa . A minta pedig egy karakterlánc, amely meghatározza a dátum és az idő megjelenítéséhez használt mintát.DateTimeFormatter.ofPattern()DateTimeFormatter

Példák

Kód Konzol kimenet
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

A fenti példában a módszert használjuk objektumok ofPattern()létrehozására DateTimeFormattera minta alapján. A következő sorban pedig a format()metódus segítségével alakítunk át egy LocalDateTimeobjektumot stringgé. Az eredményt a képernyőn látja.

A Date Time API-ból szinte bármilyen objektumot átadhat a metódusnak format().

A statika ofPattern()is nagyon egyszerű: egy mintát vesz fel argumentumként, és egy DateTimeFormatterobjektumot ad vissza. A legérdekesebb rész a mintában található.


2. Formázási minta

A mintaként átadott karakterláncot mintaként használják az információk megjelenítésekor. MM helyébe a hónap száma, dd a hónap napja, yy helyébe az év száma lép. A betűk nagybetűje számít.

Ezeknek az időmintáknak a teljes táblázata a következő:

Levél Jelentése
y Év
M Hónap
d Nap
H Órák
m Percek
s Másodpercek
S Ezredmásodperc
n Nanoszekundum.

Nem különösebben nehéz megjegyezni.

De miért tartalmaz a példa mintája ismétlődő MM, dd és yy betűket? Nos, itt kezd érdekesebb lenni.

Alapgondolat

A betűk száma befolyásolja a szöveg hosszát. Minél több betű van, annál hosszabb lesz a szöveg.

Ha a H betűt egyszer adjuk meg, akkor a 9 óra 9-ként jelenik meg, de ha a H betűt kétszer adjuk meg egymás után, akkor a 9 óra 09-ként jelenik meg.

Ha az y betűt 2-szer egymás után adjuk meg, akkor az évet 2 számjeggyel írjuk. Ha egymás után 4-szer fordul elő, akkor 4 számjegyet kell használni.

Ha az M betűt kétszer egymás után adjuk meg, akkor a hónap száma kerül kiírásra. Ha 3-szor egymás után, akkor a hónap neve (az első 3 betűje) kerül felhasználásra. Ha 4-szer egymás után, akkor a hónap teljes neve kerül felhasználásra.

Példa:

Kód Konzol kimenet
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. A minták teljes táblázata

A teljes táblázat meglehetősen nagy és rendkívül érdekes:

Minta A minta variációi Példa Leírás
y éééééé 19; 2019 Év
M/L M, MM, MMM, MMMM, MMMMM 1; 01; Jan; Január; J Hónap
d d, dd 9; 09 Nap
H H, HH 2; 02 Órák
m m, mm 3; 03 Percek
s s, ss 5; 05 Másodpercek
S S, SS, SSS, ... 1; 12; 123 Ezredmásodperc
n n 123456789 Nanoszekundum
G G, GGGG, GGGGG HIRDETÉS; Időszámítás szerint; A; Korszak
Q/q q, qq, qqq, qqqq 3; 03; Q3; 3. negyed Negyed
w w 13 Az év hete
W W 3 A hónap hete
E EEE, EEEE, EEEEE H; Hétfő; M A hét napja
e/c e, ee, eee, eee, eeeee 1; 01; H; Hétfő; M A hét napja
a a DÉLUTÁN Délelőtt vagy délután
h h 12 12 órás óra.
V VV Európa/Helsinki Időzóna
z z zzzz EET; Kelet-európai szabványidő Időzóna
O Ó ÓÓÓ GMT+2; GMT+02:00 Időzóna

Egyébként ez nem egy teljes verzió. A legteljesebb verziót itt találja .



4. Elemzési idő

Az DateTimeFormatterosztály azért is érdekes, mert nem csak egy dátumot és időt tud adott minta szerint sztringgé alakítani, hanem a fordított műveletet is végrehajtja!

Egy karakterlánc elemzése azt a folyamatot jelenti, amely értelmes tokenekre bontja.

Így néz ki:

Kód Konzol kimenet
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Először létrehozunk egy DateTimeFormatterobjektumot, és beállítjuk az elemzéshez használt mintát.

Ezután meghívjuk az LocalDate.parse()or LocalTime.parse()or LocalDateTime.parse()metódust, és átadjuk az elemezni kívánt karakterláncot az objektummal együtt DateTimeFormatter, amely megérti, hogyan kell elemezni az átadott szöveget, és milyen mintát kell használni ehhez.

Egy másik példa: ezúttal az időt elemezzük.

Kód Konzol kimenet
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59