1. DateTimeFormatter 类

特殊DateTimeFormatter类进入日期时间 API。它的目的是让程序员尽可能容易地将日期和时间转换成他们想要的准确格式。我们很高兴地报告 Java 的创造者取得了成功。

使用起来非常简单。首先,您需要创建一个DateTimeFormatter类并传入指定日期和时间显示方式的模式:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

哪里dtfDateTimeFormatter变量。是类的静态方法。pattern是一个字符串,指定将用于显示日期时间的模式。DateTimeFormatter.ofPattern()DateTimeFormatter

例子

代码 控制台输出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

在上面的例子中,我们使用ofPattern()方法创建了一个DateTimeFormatter基于模式的对象。在下一行中,我们使用该format()方法将对象转换LocalDateTime为字符串。您会在屏幕上看到结果。

您几乎可以将任何对象从 Date Time API 传递给该format()方法。

staticofPattern()也很简单:它接受一个模式作为参数并返回一个DateTimeFormatter对象。最有趣的部分是在模式中。


2.格式化模式

作为模式传入的字符串在显示信息时用作模式。MM替换为月份数,dd替换为月份中的第几天,yy替换为年份数。字母的大小写很重要。

这些时间模式的完整表格是这样的:

意义
d
H 小时
分钟
小号 千分之一秒
n 纳秒。

不是特别难记。

但是为什么示例中的模式包含重复的字母 MM、dd 和 yy?好吧,这就是它变得更有趣的地方。

大概的概念

字母的数量会影响文本的长度。字母越多,文本就越长。

如果字母 H 指定一次,则 9 小时将显示为 9,但如果字母 H 连续指定两次,则 9 小时将显示为 09。

如果字母 y 连续指定 2 次,则使用 2 位数字书写年份。如果它连续出现 4 次,则使用 4 位数字。

如果字母 M 连续指定 2 次,则写入月份数。如果连续 3 次,则使用月份名称(前 3 个字母)。如果连续 4 次,则使用月份的全名。

例子:

代码 控制台输出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3.完整的形态表

完整的表格非常大而且超级有趣:

图案 图案的变化 例子 描述
yy, yyyy 19; 2019
大号/大号 男,MM,MMM,MMMM,MMMMM 1; 01; 一月;一月; 杰
d d, dd 9; 09
H 哈,哈 2; 02 小时
米,毫米 3; 03 分钟
小号,小号 5; 05
小号 S、SS、SSS、... 1; 12; 123 千分之一秒
n n 123456789 纳秒级
G G、GGGG、GGGGG 广告; 公元; A; 时代
q/q q, qq, qqq, qqqq 3; 03; Q3;第三季 四分之一
w w 13 一年中的一周
W W 3个 每月的第几周
EEE, EEEE, EEEEE 星期一;周一; 米 一周中的天
电子邮件 e, ee, eee, eeee, eeeee 1; 01; 星期一;周一; 米 一周中的天
A A 下午 上午或下午
H H 12 12 小时制。
V 维维 欧洲/赫尔辛基 时区
z zzzzz 欧洲东部时间; 东欧标准时间 时区
啊啊啊 格林威治标准时间+2;格林威治标准时间+02:00 时区

顺便说一下,这实际上不是一个完整的版本。您可以在此处找到最完整的版本。



4.解析时间

该类DateTimeFormatter的另一个有趣之处在于它不仅能够根据给定模式将日期和时间转换为字符串,而且还能执行反向操作!

解析字符串是将其拆分为有意义的标记的过程。

这是它的样子:

代码 控制台输出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

首先,我们创建一个DateTimeFormatter对象并设置用于解析的模式。

然后我们调用LocalDate.parse()orLocalTime.parse()LocalDateTime.parse()方法并将要解析的字符串与对象一起传入DateTimeFormatter,该对象了解如何解析传递的文本以及应该使用什么模式来解析。

另一个例子:这次我们将解析时间。

代码 控制台输出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59