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教程。