Java SimpleDateFormat – Java Datumnotatie

Introductie

De Java-klassen SimpleDateFormat en DateFormat worden gebruikt voor het formatteren van datums. Ze worden voornamelijk gebruikt wanneer we de datum- en tijdfunctionaliteit van Java willen weergeven of gebruiken. Beide klassen bevinden zich in het com.text-pakket.

Java DateFormat

  • DateFormat wordt gebruikt om een datum op basis van een specifieke locatie om te zetten in een String, die als invoer wordt gegeven.
  • De locatie wordt gebruikt om de regio en taal te specificeren om de code meer geschikt te maken voor de gebruiker.
  • De manier waarop datums worden geschreven, verschilt per regio. Bijvoorbeeld, 31st Dec 2017 wordt in India geschreven als 31-12-2017, maar hetzelfde zou in de Verenigde Staten als 12-31-2017 worden geschreven.
  • DateFormat-klassen zijn niet gesynchroniseerd; het wordt aanbevolen om voor elk thread een aparte instantie te maken.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

Opmerking: De constructor Locale(String, String) is verouderd sinds versie 19

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

De methode getDateInstance van DateFormat heeft twee invoerparameters nodig. De eerste parameter geeft het te gebruiken DateFormat aan en de tweede parameter is de locatie.

Met behulp van format

De klasse DateFormat heeft een format-methode die verantwoordelijk is voor de opmaak.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Deze code zal de datum opmaken in de Franse (fr) taal en de regio Frankrijk (FR):

Output
3 janv. 2018

Met behulp van getTimeInstance()

Om een instantie van DateFormat te maken, gebruiken we de methode getDateInstance().

Voor het opmaken van een tijd hebben we een instantie van tijd nodig. We zullen de methode getTimeInstance() gebruiken om een instantie van tijd te verkrijgen.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Deze code zal de tijd opmaken in de Franse (fr) taal en de regio Frankrijk (FR):

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat is vergelijkbaar met DateFormat. Het enige grote verschil tussen hen is dat SimpleDateFormat kan worden gebruikt voor opmaak (Date naar String conversie) en voor parsing (String naar Date conversie) met ondersteuning voor locale, terwijl DateFormat geen locale-ondersteuning heeft. DateFormat is een abstracte klasse die basisondersteuning biedt voor het formatteren en parseren van data. SimpleDateFormat is de concrete klasse die DateFormat uitbreidt.

SimpleDateFormat kan worden gemaakt met behulp van de SimpleDateFormat constructor. De constructor is een geparametriseerde constructor en heeft een String-patroon als parameter nodig.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

De String patroon is het patroon dat zal worden gebruikt om een datum te formatteren en de output zal worden gegenereerd in dat patroon zoals “MM-dd-yyyy“.

Patronen

Laten we eens kijken naar de patroonsyntax die moet worden gebruikt voor het formatteringspatroon.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Sommige letters moeten in verschillende hoeveelheden worden gebruikt voor verschillende resultaten, zoals voor maand:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

Voorbeelden

Laten we nu eens kijken naar enkele voorbeelden voor verschillende formaten van datum en tijd.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

Gebruikmakend van SimpleDateFormat()

Om een datum te ontleden, moeten we een instantie van SimpleDateFormat maken met behulp van de constructor en vervolgens de methode format() gebruiken:

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Deze code zal “MM-dd-yyyy” uitvoeren:

Output
01-02-2018

Deze indeling produceert “maand in jaar”, “dag in maand” en “jaar”. Het type karakter (en de hoofdletter) en de hoeveelheid tekens dragen bij aan de string. De maand wordt gerepresenteerd door twee cijfers, de dag door twee cijfers en het jaar door vier cijfers.

Deze code toonde de datum “2 januari 2018” als “01-02-2018“.

Voor het ontleden van tijd moeten we het patroon wijzigen bij het maken van de instantie van SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Deze code zal “HH:mm:ss.SSSZ” uitvoeren:

Output
13:03:15.454+0530

Dit patroon produceert “uren”, “minuten”, “seconden”, “milliseconden” en “tijdzone-offset in uren (RFC-patroon)”.

Deze code toonde de tijd als “13:03:15.454+0530“.

Gebruikmakend van parse()

Parsing is de conversie van String naar een `java.util.Date` instantie. We kunnen een string naar een datuminstantie parsen met de `parse()` methode van de SimpleDateFormat-klasse. Om een String naar een Datum te parsen, hebben we een instantie van de SimpleDateFormat-klasse nodig en een stringpatroon als invoer voor de constructor van de klasse.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Dit zal een datum uitvoeren (`12-01-2018`) zonder een gespecificeerde tijd:

Output
Sat Dec 01 00:00:00 IST 2018

Lat​en we nu eens kijken naar een voorbeeld van `SimpleDateFormat` om tijd te parsen.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Dit zal een tijd uitvoeren (`22:00:03`) zonder een gespecificeerde datum:

Output
Thu Jan 01 22:00:03 IST 1970

Omdat we geen datum hebben gespecificeerd, beschouwde het programma epoch als de datum (d.w.z. `01-Jan-1970`).

Gebruik van `Locale`

We hebben gewerkt met `Locale` als onderdeel van de `DateFormat` en we hebben gezien dat locaties worden gebruikt op basis van regio’s.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

Deze code zal de huidige tijd formatteren in het Frans (`fr`) en de regio Frankrijk (`FR`):

Output
mardi janvier 2018 14:51:02.354+0530

De dag en maand worden in het Frans genoemd op basis van de `Locale` die als invoer is opgegeven – `mardi` is “dinsdag” en `janvier` is “januari”.

Conclusie

In dit artikel heb je geleerd over Java’s SimpleDateFormat en DateFormat.

Referentie:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format