0
点赞
收藏
分享

微信扫一扫

第十章《日期与时间》第8节:格式化日期时间对象


相比起早期的Date类对象,Java8新日期时间系统当中的日期时间类对象几乎不需要格式化的操作。如果直接把这些类的对象输出到控制台,基本上所有人都能看得懂这个对象所表示的含义。即便如此,有时候人们还是需要对这些对象进行格式化输出。例如有时候希望能够显示出某个日期对象是星期几,在这几种情况下,直接输出一个日期对象显然不能满足要求。

如果希望格式化Java8新日期时间系统中日期时间类的对象,需要借助DateTimeFormatter类来完成,这个类位于java.time.format包下。DateTimeFormatter类的对象通过ofPattern()静态方法来创建,而格式化操作则由format()方法完成。在创建对象的时候,以字符串参数设定日期时间对象的输出格式。与10.1小节介绍的SimpleDateFormat类一样,DateTimeFormatter类在格式化日期时间对象时也要用到一些有特殊含义的字母,下面的表10-16列出了DateTimeFormatter类中常用特殊字母的含义。

表10-16 DateTimeFormatter类中常用特殊字母含义

字母

含义

y

M

d

E

星期

H

以24小时为周期的小时(范围0-23)

h

以12小时为周期的小时(范围1-12)

m

分钟

s

下面的【例10-33】演示了如何使用DateTimeFormatter类格式化日期时间对象。

【例10-33 格式化日期时间对象1】

Exam10_33.java

import java.time.*;
import java.time.format.DateTimeFormatter;
public class Exam10_33 {
public static void main(String[] args){
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE");
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EE");
DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
ZoneId zid = ZoneId.of("Asia/Shanghai");
ZonedDateTime zdt = ZonedDateTime.of(2022,4,15,20,30,45,0,zid);
System.out.println("dtf1的输出格式:"+dtf1.format(zdt));
System.out.println("dtf2的输出格式:"+dtf2.format(zdt));
System.out.println("dtf3的输出格式:"+dtf3.format(zdt));
}
}

【例10-33】用3种格式输出了一个ZonedDateTime类对象。实际上,DateTimeFormatter不仅可以格式化ZonedDateTime的对象,还可以格式化OffsetDateTime、LocaDate、LocalTime以及LocalDateTime类的对象。【例10-33】的运行结果如图10-30所示。

第十章《日期与时间》第8节:格式化日期时间对象_java

图10-30【例10-33】运行结果

从图10-30可以看出,如果把星期的格式设置为“EEEE”,则输出结果为“星期五”,而把星期的格式设置为“EE”,则输出结果为“周五”。

DateTimeFormatter类还为开发者预设了用于格式化日期时间的对象,这些对象都以静态属性的形式出现在DateTimeFormatter类中,它们可以直接把一个日期时间对象格式化为某种特定格式。下面的表10-17展示了这些对象的格式化效果。

表10-17 预置对象的格式化效果

预置对象

格式化效果

BASIC_ISO_DATE

20111203

ISO_LOCAL_DATE

2011-12-03

ISO_OFFSET_DATE

2011-12-03+01:00

ISO_DATE

2011-12-03

ISO_LOCAL_TIME

10:15:30

ISO_OFFSET_TIME

10:15:30+01:00

ISO_TIME     

10:15:30+01:00

ISO_LOCAL_DATE_TIME

2011-12-03T10:15:30

ISO_OFFSET_DATE_TIME

2011-12-03T10:15:30+01:00

ISO_ZONED_DATE_TIME

2011-12-03T10:15:30+01:00[Europe/Paris]

ISO_DATE_TIME

2011-12-03T10:15:30+01:00[Europe/Paris]

ISO_ORDINAL_DATE

2012-337

ISO_WEEK_DATE

2012-W48-6

ISO_INSTANT

2011-12-03T10:15:30Z

RFC_1123_DATE_TIME

Tue, 3 Jun 2008 11:05:30 +0800

下面的【例10_34】展示了如何用预置对象格式化日期时间。

【例10-34 格式化日期时间对象2】

Exam10_34.java

import java.time.*;
import java.time.format.DateTimeFormatter;
public class Exam10_34 {
public static void main(String[] args){
DateTimeFormatter dtf1 = DateTimeFormatter.ISO_LOCAL_DATE;
DateTimeFormatter dtf2 = DateTimeFormatter.ISO_DATE_TIME;
DateTimeFormatter dtf3 = DateTimeFormatter.RFC_1123_DATE_TIME;
ZoneId zid = ZoneId.of("Asia/Shanghai");
ZonedDateTime zdt = ZonedDateTime.of(2022,4,15,20,30,45,0,zid);
System.out.println("dtf1的输出格式:"+dtf1.format(zdt));
System.out.println("dtf2的输出格式:"+dtf2.format(zdt));
System.out.println("dtf3的输出格式:"+dtf3.format(zdt));
}
}

【例10_34】的运行结果如图10-31所示。

第十章《日期与时间》第8节:格式化日期时间对象_输出格式_02

图10-31【例10_34】运行结果

除阅读文章外,各位小伙伴还可以点击这里观看我在本站的视频课程学习Java!

举报

相关推荐

0 条评论