1. DateTimeFormatter-klasse

De speciale DateTimeFormatterklasse vond zijn weg naar de Date Time API. Het doel is om het voor programmeurs zo gemakkelijk mogelijk te maken om een ​​datum en tijd om te zetten in het exacte formaat dat ze willen. En we zijn blij te kunnen melden dat de makers van Java daarin zijn geslaagd.

Het gebruik ervan is heel eenvoudig. Eerst moet u een klasse maken DateTimeFormatteren een patroon doorgeven dat aangeeft hoe de datum en tijd worden weergegeven:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Waar dtfis een DateTimeFormattervariabele. is een statische methode van de klasse. En patroon is een tekenreeks die het patroon specificeert dat zal worden gebruikt om de datum en tijd weer te geven.DateTimeFormatter.ofPattern()DateTimeFormatter

Voorbeelden

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


02-22-19

In het bovenstaande voorbeeld gebruiken we de ofPattern()methode om een DateTimeFormatter​​object te maken op basis van het patroon. En in de volgende regel gebruiken we de format()methode om een LocalDateTime​​object om te zetten in een string. Je ziet het resultaat op het scherm.

U kunt bijna elk object van de Date Time API doorgeven aan de format()methode.

De static ofPattern()is ook heel eenvoudig: het neemt een patroon als argument en retourneert een DateTimeFormatterobject. Het meest interessante deel is te vinden in het patroon.


2. Opmaakpatroon

De tekenreeks die als patroon wordt doorgegeven, wordt gebruikt als patroon bij het weergeven van informatie. MM wordt vervangen door het nummer van de maand, dd door de dag van de maand en yy door het nummer van het jaar. De casus van de brieven is van belang.

De volledige tabel voor deze tijdpatronen is als volgt:

Brief Betekenis
j Jaar
M Maand
D Dag
H Uur
M Minuten
S seconden
S Duizenden van een seconde
N Nanoseconden.

Niet bijzonder moeilijk te onthouden.

Maar waarom bevat het patroon in het voorbeeld herhaalde letters MM, dd en jj? Nou, hier wordt het interessanter.

Algemeen idee

Het aantal letters beïnvloedt de lengte van de tekst. Hoe meer letters er zijn, hoe langer de tekst zal zijn.

Als de letter H één keer wordt opgegeven, wordt 9 uur weergegeven als 9, maar als de letter H twee keer achter elkaar wordt opgegeven, wordt 9 uur weergegeven als 09.

Als de letter y 2 keer achter elkaar wordt opgegeven, wordt het jaar geschreven met 2 cijfers. Als het 4 keer achter elkaar voorkomt, worden er 4 cijfers gebruikt.

Als de letter M 2 keer achter elkaar wordt opgegeven, wordt het nummer van de maand geschreven. Als het 3 keer achter elkaar is, wordt de naam van de maand (de eerste 3 letters) gebruikt. Indien 4 keer achter elkaar, dan wordt de volledige naam van de maand gebruikt.

Voorbeeld:

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


February-22-2019


3. Volledige tabel met patronen

De volledige tafel is vrij groot en super interessant:

Patroon Variaties van het patroon Voorbeeld Beschrijving
j jj, jjjj 19; 2019 Jaar
M/L M, MM, MMM, MMMM, MMMMM 1; 01; jan; Januari; J Maand
D d, dd 9; 09 Dag
H H, HH 2; 02 Uur
M m, mm 3; 03 Minuten
S s, ss 5; 05 seconden
S S, SS, SSS, ... 1; 12; 123 Duizenden van een seconde
N N 123456789 Nanoseconden
G G, GGGG, GGGG ADVERTENTIE; Anno Domini; A; Tijdperk
Vraag/q q, qq, qqq, qqqq 3; 03; Q3; 3e kwartaal Kwartaal
w w 13 Week van het jaar
W W 3 Week van de maand
E EEEE, EEEE, EEEEEE ma; Maandag; M Dag van de week
e/c e, ee, eee, eee, eee 1; 01; ma; Maandag; M Dag van de week
A A P.M AM of PM
H H 12 12-uurs klok.
V VV Europa/Helsinki Tijdzone
z z zzzzz EET; Oost-Europese standaardtijd Tijdzone
O O OOOO GMT+2; GMT+02:00 Tijdzone

Overigens is dit niet echt een volledige versie. De meest complete versie vind je hier .



4. Parseertijd

De DateTimeFormatterklasse is ook interessant vanwege de mogelijkheid om niet alleen een datum en tijd om te zetten in een string volgens een bepaald patroon, maar ook om de omgekeerde bewerking uit te voeren!

Het ontleden van een tekenreeks is het splitsen ervan in betekenisvolle tokens.

Hier is hoe het eruit ziet:

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


February-23-2019

Eerst maken we een DateTimeFormatterobject en stellen we het patroon in dat wordt gebruikt voor het parseren.

Vervolgens noemen we de LocalDate.parse()of LocalTime.parse()of LocalDateTime.parse()methode en geven we de string door die moet worden geparseerd samen met het DateTimeFormatterobject, dat begrijpt hoe de doorgegeven tekst moet worden geparseerd en welk patroon daarvoor moet worden gebruikt.

Nog een voorbeeld: deze keer ontleden we de tijd.

Code Console-uitvoer
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59