• Java中DateTimeFormatter的使用方法和案例


    🔔简介

    在Java中,DateTimeFormatter类用于格式化和解析日期时间对象。它是日期时间格式化的强大而灵活的工具。

    🔔作用

    🌵1.本地化时间

    本地化时间指根据指定的语言环境显示时间

    1

    1.1.创建DateTimeFormatter时指定Locale

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.CHINA);
    
    • 1

    1.2.使用该DateTimeFormatter格式化日期时间

    LocalDate date = LocalDate.now();
    String cnDate = date.format(formatter); 
    这样就可以得到适合中国需求的日期格式"2021-10-01"。
    
    • 1
    • 2
    • 3

    1.3.可以通过Locale.US、Locale.UK等地区,从而得到不同格式

    DateTimeFormatter usFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US);
    DateTimeFormatter ukFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.UK);
    LocalDate date = LocalDate.now();
    String usDate = date.format(usFormatter); // 10/01/2021
    String ukDate = date.format(ukFormatter); // 01/10/2021
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.4.使用预定义的格式化常量指定地区

    LocalDate date = LocalDate.now();
    String cnDate = date.format(FormatStyle.LONG, Locale.CHINA); 
    String frDate = date.format(FormatStyle.FULL, Locale.FRANCE);
    
    • 1
    • 2
    • 3
    🌵2.ISO/RFC规范格式

    ISO和RFC定义了标准的日期时间格式,可以直接使用:

    LocalDate date = LocalDate.now();
    
    // ISO格式
    String isoDate = date.format(ISO_LOCAL_DATE); 
    
    // RFC格式 
    String rfcDate = date.format(RFC_1123_DATE_TIME);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    格式名称描述格式示例
    BASIC_ISO_DATE基本ISO日期yyyyMMdd20111203
    ISO_LOCAL_DATEISO本地化日期yyyy-MM-dd2011-12-03
    ISO_OFFSET_DATE带偏移时区的ISO日期yyyy-MM-ddXX2011-12-03+01:00
    ISO_DATEISO 日期,可能带偏移量yyyy-MM-dd 或者 yyyy-MM-ddXX2011-12-03+01:00’;2011-12-03
    ISO_LOCAL_TIMEISO本地化时间HH:mm:ss10:15:30
    ISO_OFFSET_TIME带偏移时区的ISO时间HH:mm:ssXX10:15:30+01:00
    ISO_TIMEISO时间,可能带偏移量HH:mm:ss 或者 HH:mm:ssXX10:15:30+01:00;10:15:30
    ISO_LOCAL_DATE_TIMEISO本地日期和时间yyyy-MM-dd’T’HH:mm:ss2011-12-03T10:15:30
    ISO_OFFSET_DATE_TIME带偏移时区的ISO日期yyyy-MM-dd’T’HH:mm:ssXX2011-12-03T10:15:30+01:00
    ISO_ZONED_DATE_TIME带时区的ISO日期和时间yyyy-MM-dd’T’HH:mm:ssZZZZ2011-12-03T10:15:30+01:00
    ISO_DATE_TIME带Zoneld的ISO日期和时间yyyy-MM-dd’T’HH:mm:ssxxx2011-12-03T10:15:30+01:00
    ISO_ORDINAL_DATE年份和一年的第N天yyyy-DDD2012-337
    ISO_WEEK_DATE年份-第N周-周Nxxxx-'W’ww-e2012-W48-6
    ISO_INSTANTISO时刻2011-12-03T10:15:30Z
    RFC_1123_DATE_TIMERFC 1123/RFC 822Tue, 3 Jun 2008 11:05:30 GMT
    🌵3.范式格式化

    常见格式化:

    年份:

    • YYYY:4位数字表示的年份,例如:2023
    • yyyy:4位数字表示的年份,例如:2023
    • YY:2位数字表示的年份,例如:23

    月份:

    • MM:2位数字表示的月份,例如:01表示一月,12表示十二月
    • MMM:缩写形式的月份,例如:Jan表示一月,Dec表示十二月
    • MMMM:完整形式的月份,例如:January表示一月,December表示十二月

    日:

    • DD dd:2位数字表示的日期,例如:01表示1号,31表示31号

    星期几:

    • ddd:缩写形式的星期几,例如:Mon表示星期一,Sun表示星期日
    • dddd:完整形式的星期几,例如:Monday表示星期一,Sunday表示星期日

    时间:

    • HH:24小时制的小时,例如:00表示午夜12点,23表示晚上11点
    • hh:12小时制的小时,例如:01表示上午1点,12表示下午12点
    • mm:分钟,例如:00表示整点,30表示30分钟
    • ss:秒,例如:00表示整分,59表示59秒
    • a:上午/下午标识,例如:AM表示上午,PM表示下午

    参数列表整理:

    符号含义示例
    G显示纪元文本AD(公元)
    u年份2023
    У公元年份2023
    D一年的第N天300
    M或者L月份7;07; Jul; July;
    d一个月的第N目9
    Q或者q年份中的季度2; 02; Q2; 2rd quarter
    Y以周为基础的年份1997;97
    w以周为基础的年份中的周30
    W一个月的第N周3
    E星期Tue; Tuesday; T
    e或者c本地化星期2; 02; Tue; Tuesday; T
    F一个月的第N周2
    a一天中的上午(am)或者下午(pm)PM
    h上午下午12小时制(1-12)10
    K上午下午11小时制(1-11)1
    k上午下午(1-24)14
    H小时制(0-23)1
    m小时中的分钟30
    s分秒43
    S当前秒的毫秒800
    A当前天的毫秒数1111
    n当前秒的纳秒数987654321
    N当前天的纳秒数1234000000
    V时区IDAmerica/Los_Angeles; Z; -08:30
    z时区名称Pacific Standard Time; PST
    O本地化时区漂移GMT+8; GM T+08:00; UTC-08:00
    Xoffset-XZ; -08; -0830; -08:30; -083015; -08:30:15
    xoffset-x+0000; -08; -0830; -08:30; -083015; -08:30:15
    Zoffset-Z+0000; -0800; -08:00;
    ppad modifier1
    分隔符
    ‘’不被解析的文字
    [可选部分开始
    ]可选部分结束

    示例:

    String pattern = "G uuuu'年'MMMd'日' ZZZZZ VV";
    String format= DateTimeFormatter.ofPattern(pattern).format(ZonedDateTime.now());
    System.out.println(format);
    
    • 1
    • 2
    • 3

    格式化结果显示:

    公元 2023年10月01日 +08:00 Asia/hangzhou
    
    • 1

    范式格式化还提供了一些常用的格式化模式:

    LocalDateTime dt = LocalDateTime.now();
    
    // SHORT范式格式化  
    String shortDt = dt.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT));
    
    // MEDIUM范式格式化
    String mediumDt = dt.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    🔔写在最后

    如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!
  • 相关阅读:
    文心一言 vs gpt-4 全面横向比较
    用于胰腺癌自动化综述报告和可切除性分类的大型语言模型| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统
    C++ 哈希
    BC1.2 PD协议
    关于OxyPlot.Wpf包没有Plot控件问题
    互联网摸鱼日报(2023-11-20)
    【MySQL】聚合函数:汇总、分组数据
    网络运维Day19
    MySQL 支持索引类型和DDL语句
    Git-安装与使用(快速上手图文教程)
  • 原文地址:https://blog.csdn.net/jinxinxin1314/article/details/133461628