首页 > 其他分享 > 第十章《日期与时间》第8节:格式化日期时间对象

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

时间:2023-01-02 11:31:46浏览次数:54  
标签:10 格式化 30 第十章 日期 ISO DateTimeFormatter DATE

​相比起早期的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.ZoneId;
import java.time.ZonedDateTime;
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节:格式化日期时间对象_日期时间

图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节:格式化日期时间对象_Java_02

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

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。


标签:10,格式化,30,第十章,日期,ISO,DateTimeFormatter,DATE
From: https://blog.51cto.com/mugexuetang/5983524

相关文章