• 第十章《日期与时间》第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

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

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

    图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

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

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

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

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

  • 相关阅读:
    美式发音速成笔记
    【C++ STL】-- 二叉搜索树
    TCP select 轮询服务器
    GaussDB数据库SQL系列-SQL与ETL浅谈
    Go项目使用自定义的公共单元
    02-Node.js模块化、模块作用域、module.exports
    支付通道被黑客攻击
    [数据可视化] 词云(Word Cloud)
    vs studio Ctrl+D 快捷键失效(无法复制行)
    treectrl类封装 2023/8/13 下午4:07:35
  • 原文地址:https://blog.csdn.net/shalimu/article/details/128077240