返回

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

发布时间:2023-01-04 20:48:38 303
# java# java

​相比起早期的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节:格式化日期时间对象_DateTimeFormatter_02

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

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


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线