Java DateTimeFormatter
最后修改日期:2024 年 7 月 10 日
在本文中,我们将展示如何使用 DateTimeFormatter 在 Java 中格式化和解析日期时间值。
DateTimeFormatter
类用于格式化和解析现代 Java API 日期时间值。
DateTimeFormatter
包含两个基本方法:format
和 parse
。
常用常量
DateTimeFormatter
包含几个常用的格式化常量,例如 BASIC_ISO_DATE
或 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)); }
该程序使用五个常用的格式化常量来格式化当前的日期时间。
$ java Main.java 20240710 2024-07-10 2024-07-10T15:14:42.4663991 2024-W28-3 2024-192
DateTimeFormatter Instant
Instant
是时间线上的一个瞬时点。 我们使用 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)); }
该程序格式化当前的 Instant
值。
$ java Main.java 2024-07-10T13:09:28.177132200Z
DateTimeFormatter FormatStyle
我们可以使用 FormatStyle.SHORT
、FormatStyle.MEDIUM
、FormatStyle.LONG
、FormatStyle.FULL
格式样式来格式化 LocalDate
值。
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)); }
该程序使用四种格式样式来格式化当前的本地日期。
$ java Main.java 7/10/24 Jul 10, 2024 July 10, 2024 Wednesday, July 10, 2024
DateTimeFormatter.ofPattern
可以使用 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)); }
该程序使用三种自定义格式打印当前的本地日期时间。
$ java Main.java 2024-07-10 Wed, Jul 10 2024 Wednesday, Jul 10, 2024 15:11:31 PM
DateTimeFormatter 本地化自定义格式
下一个示例使用 ofPattern
和 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)); }
该程序以中文、俄语和斯洛伐克语打印当前的本地日期时间。
$ 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
可以使用 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)); }
该程序使用 DateTimeFormatterBuilder
生成一个格式化器。
$ java Main.java 10. júla 2024
DateTimeFormatter parse
parse
方法完全解析文本,生成一个时间对象。
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); }
该程序解析一个字符串以生成一个 LocalDate
值。
来源
在本文中,我们使用 DateTimeFormatter
来格式化和解析日期时间值。
作者
列出所有Java教程。