在本文中,我们展示了如何使用 DateTimeFormatter 在 Java 中格式化和解析日期时间值。
DateTimeFormatter
类用于格式化和解析现代 Java API 日期时间值。
DateTimeFormatter
包含两个基本方法:format
和 parse
。
DateTimeFormatter
包含几个常见的格式化常量,例如 BASIC_ISO_DATE
或 ISO_DATE_TIME
。
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class FormatterEx { public static void main(String[] args) { 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)); } }
该程序使用五个通用格式化程序常量格式化当前日期时间。
20221026 2022-10-26 2022-10-26T20:33:56.705430917 2022-W43-3 2022-299
Instant
是时间线上的一个瞬时点。我们使用 DateTimeFormatter.ISO_INSTANT
对其进行格式化。
package com.zetcode; import java.time.Instant; import java.time.format.DateTimeFormatter; public class FormatterEx { public static void main(String[] args) { var now = Instant.now(); var dtf = DateTimeFormatter.ISO_INSTANT; System.out.println(dtf.format(now)); } }
该程序格式化当前的 Instant
值。
2022-10-26T18:42:14.117403659Z
我们可以使用 FormatStyle.SHORT
、FormatStyle.MEDIUM
、FormatStyle.LONG
, FormatStyle.FULL
格式样式。
package com.zetcode; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; public class FormatterEx { public static void main(String[] args) { 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)); } }
该程序使用四种格式样式来格式化当前本地日期。
10/26/22 Oct 26, 2022 October 26, 2022 Wednesday, October 26, 2022
可以使用 DateTimeFormatter.ofPattern
定义自定义格式。
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class FormatterEx { public static void main(String[] args) { 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)); } }
该程序使用三种自定义格式打印当前本地日期时间。
2022-10-26 Wed, Oct 26 2022 Wednesday, Oct 26, 2022 21:01:49 PM
下一个示例使用 ofPattern
和 Locale
创建本地化的日期时间格式。
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class FormatterEx { public static void main(String[] args) { 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, new Locale("RU", "ru")); var dtf3 = DateTimeFormatter.ofPattern(pattern, new Locale("SK", "sk")); System.out.println(dtf1.format(now)); System.out.println(dtf2.format(now)); System.out.println(dtf3.format(now)); } }
该程序以中文、俄语和斯洛伐克语打印当前本地日期时间。
星期三, 10月 26, 2022 21:07:17 下午 среда, окт. 26, 2022 21:07:17 PM streda, okt 26, 2022 21:07:17 PM
可以使用 DateTimeFormatterBuilder
生成复杂的格式化程序。
package com.zetcode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; import java.util.Locale; public class FormatterEx { public static void main(String[] args) { 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(new Locale("SK", "sk")); System.out.println(dtf.format(now)); } }
该程序使用 DateTimeFormatterBuilder
生成格式化程序。
26. októbra 2022
parse
方法完全解析生成时间对象的文本。
package com.zetcode; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; public class FormatterEx { public static void main(String[] args) { var d = "2022-10-26"; DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE; TemporalAccessor ta = dtf.parse(d); var ld = LocalDate.from(ta); System.out.println(ld); } }
该程序解析字符串以生成 LocalDate
值。
在本文中,我们使用了 DateTimeFormatter
来格式化和解析日期时间值。
List 所有 Java 教程.
地址:https://www.cundage.com/article/java-datetimeformatter.html