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 eenString
, 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 als31-12-2017
, maar hetzelfde zou in de Verenigde Staten als12-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
):
Output3 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
):
Output11: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:
Output01-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:
Output13: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:
OutputSat Dec 01 00:00:00 IST 2018
Laten 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:
OutputThu 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`):
Outputmardi 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