Java DateTimeFormatter
last modified July 10, 2024
In this article we show how to formate and parse datetime values in Java with DateTimeFormatter.
DateTimeFormatter
class is used to format and parse modern Java API
datetime values.
The DateTimeFormatter
contains two basics methods:
format
and parse
.
Common constants
DateTimeFormatter
contains several common formatter constants such
as BASIC_ISO_DATE
or ISO_DATE_TIME
.
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; void main() { var now = LocalDateTime.now(); DateTimeFormatter dtf1 = DateTimeFormatter.BASIC_ISO_DATE; DateTimeFormatter dtf2 = DateTimeFormatter.ISO_DATE; DateTimeFormatter dtf3 = DateTimeFormatter.ISO_DATE_TIME; DateTimeFormatter dtf4 = DateTimeFormatter.ISO_WEEK_DATE; DateTimeFormatter dtf5 = DateTimeFormatter.ISO_ORDINAL_DATE; System.out.println(dtf1.format(now)); System.out.println(dtf2.format(now)); System.out.println(dtf3.format(now)); System.out.println(dtf4.format(now)); System.out.println(dtf5.format(now)); }
The program formats the current datetime with five common formatter constants.
$ java Main.java 20240710 2024-07-10 2024-07-10T15:14:42.4663991 2024-W28-3 2024-192
DateTimeFormatter Instant
The Instant
is an instantaneous point on the time-line. We format
it with DateTimeFormatter.ISO_INSTANT
.
import java.time.Instant; import java.time.format.DateTimeFormatter; void main() { var now = Instant.now(); var dtf = DateTimeFormatter.ISO_INSTANT; System.out.println(dtf.format(now)); }
The program formats the current Instant
value.
$ java Main.java 2024-07-10T13:09:28.177132200Z
DateTimeFormatter FormatStyle
We can format LocalDate
values with FormatStyle.SHORT
,
FormatStyle.MEDIUM
, FormatStyle.LONG
,
FormatStyle.FULL
format styles.
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.util.Locale; void main() { Locale.setDefault(Locale.ENGLISH); var now = LocalDate.now(); var dtf1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); var dtf2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); var dtf3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG); var dtf4 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); System.out.println(dtf1.format(now)); System.out.println(dtf2.format(now)); System.out.println(dtf3.format(now)); System.out.println(dtf4.format(now)); }
The program formats the current local date with the four format styles.
$ java Main.java 7/10/24 Jul 10, 2024 July 10, 2024 Wednesday, July 10, 2024
DateTimeFormatter.ofPattern
Custom formats can be defined with DateTimeFormatter.ofPattern
.
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; void main() { Locale.setDefault(Locale.ENGLISH); var now = LocalDateTime.now(); var dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); var dtf2 = DateTimeFormatter.ofPattern("E, MMM dd yyyy"); var dtf3 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a"); System.out.println(dtf1.format(now)); System.out.println(dtf2.format(now)); System.out.println(dtf3.format(now)); }
The program prints the current local datetime with three custom formats.
$ java Main.java 2024-07-10 Wed, Jul 10 2024 Wednesday, Jul 10, 2024 15:11:31 PM
DateTimeFormatter localized custom formats
The next example creates localized datetime formats with ofPattern
and Locale
.
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; void main() { var now = LocalDateTime.now(); String pattern = "EEEE, MMM dd, yyyy HH:mm:ss a"; var dtf1 = DateTimeFormatter.ofPattern(pattern, Locale.CHINA); var dtf2 = DateTimeFormatter.ofPattern(pattern, Locale.of("RU", "ru")); var dtf3 = DateTimeFormatter.ofPattern(pattern, Locale.of("SK", "sk")); System.out.println(dtf1.format(now)); System.out.println(dtf2.format(now)); System.out.println(dtf3.format(now)); }
The program prints the current local datetime in Chinese, Russian, and Slovak.
$ java Main.java 星期三, 7月 10, 2024 15:12:21 下午 среда, июл. 10, 2024 15:12:21 PM streda, júl 10, 2024 15:12:21 PM
DateTimeFormatterBuilder
Complex formatters can be generated with DateTimeFormatterBuilder
.
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; import java.util.Locale; void main() { var now = LocalDateTime.now(); DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendText(ChronoField.DAY_OF_MONTH) .appendLiteral(". ") .appendText(ChronoField.MONTH_OF_YEAR) .appendLiteral(" ") .appendText(ChronoField.YEAR) .parseCaseInsensitive() .toFormatter(Locale.of("SK", "sk")); System.out.println(dtf.format(now)); }
The program generates a formatter with DateTimeFormatterBuilder
.
$ java Main.java 10. júla 2024
DateTimeFormatter parse
The parse
method fully parses the text producing a temporal object.
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; void main() { var d = "2023-10-26"; DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE; TemporalAccessor ta = dtf.parse(d); var ld = LocalDate.from(ta); System.out.println(ld); }
The program parses a string to produce a LocalDate
value.
Source
Java DateTimeFormatter - language reference
In this article we have used DateTimeFormatter
to format and parse
datetime values.
Author
List all Java tutorials.