Java DateTimeFormatter类使用简介

在 Java 中,DateTimeFormatter是 Java 8 + 引入的线程安全日期时间格式化工具,用于解析(字符串→日期)和格式化(日期→字符串)操作,以下是核心用法:
一、基本使用步骤
创建格式化器:通过ofPattern()指定格式模式,结合Locale控制语言。
格式化日期:调用日期对象(如LocalDate/LocalDateTime)的format()方法。
解析字符串:调用DateTimeFormatter的parse()方法,转换为日期对象。
二、常用示例
1. 格式化日期 / 时间

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTimeFormatterDemo {
    public static void main(String[] args) {
        // 1. 创建格式化器(格式模式+区域设置)
        // 模式说明:yyyy-年,MM-月,dd-日,HH-24小时,mm-分,ss-秒,EEEE-星期全称
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "yyyy年MM月dd日 HH:mm:ss EEEE",
            Locale.SIMPLIFIED_CHINESE // 简体中文
        );

        // 2. 格式化当前日期时间
        LocalDateTime now = LocalDateTime.now();
        String formattedNow = now.format(formatter);
        System.out.println("格式化结果:" + formattedNow); // 示例:2025年12月25日 15:30:20 星期四
    }
}

2. 解析字符串为日期对象

// 解析字符串为LocalDate
String dateStr = "2025-12-25";
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateStr, dateFormatter);
System.out.println("解析后的日期:" + date); // 输出:2025-12-25

// 解析字符串为LocalDateTime
String dateTimeStr = "2025-12-25 18:00:00";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, dateTimeFormatter);
System.out.println("解析后的日期时间:" + dateTime); // 输出:2025-12-25T18:00

三、关键注意事项
模式字母:常用模式(区分大小写):
y:年(如yyyy→2025);M:月(如MM→12);d:日(如dd→25)
H:24 小时制(如HH→18);h:12 小时制(如hh→06)
m:分;s:秒;S:毫秒;E:星期(如EEEE→星期四)
线程安全:DateTimeFormatter是不可变类,可在多线程环境直接共享。
区域设置:通过Locale(如Locale.US)控制日期的语言(如星期显示为 “Thursday”)。
四、预定义格式化器
JDK 提供了常用的预定义格式化器,无需自定义模式:

// 标准ISO日期格式(yyyy-MM-dd)
LocalDate date = LocalDate.parse("2025-12-25", DateTimeFormatter.ISO_LOCAL_DATE);

// 标准ISO日期时间格式(yyyy-MM-dd'T'HH:mm:ss)
LocalDateTime dateTime = LocalDateTime.parse("2025-12-25T18:00:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME);

四、DateTimeFormatter类的常用格式模式

1、核心格式模式字母对照表(区分大小写)

模式字母    含义    示例(基于时间:2025-12-25 18:30:45.123 星期四)
y    年(位数可自定义)    yyyy → 2025;yy → 25
M    月(数字 / 文本)    MM → 12;M → 12;MMM → 十二月(中文)
d    日(月份中的天数)    dd → 25;d → 25
H    小时(24 小时制)    HH → 18;H → 18
h    小时(12 小时制)    hh → 06;h → 6
m    分钟    mm → 30;m → 30
s    秒    ss → 45;s → 45
S    毫秒(最多 3 位)    SSS → 123;SS → 12;S → 1
E    星期(文本)    EEEE → 星期四;E → 四
a    上午 / 下午(12 小时制)    a → 下午(中文);AM/PM(英文)
D    一年中的天数    DDD → 359(2025 年第 359 天)
w    一年中的周数    ww → 52(2025 年第 52 周)

2、

常用组合模式示例
下面是开发中高频使用的格式组合,可直接复制使用:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class CommonPatterns {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.of(2025, 12, 25, 18, 30, 45, 123000000);
        Locale zhLocale = Locale.SIMPLIFIED_CHINESE;

        // 1. 仅日期(常用):2025-12-25
        DateTimeFormatter pattern1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println("模式1:" + now.format(pattern1));

        // 2. 日期+24小时制时间:2025-12-25 18:30:45
        DateTimeFormatter pattern2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("模式2:" + now.format(pattern2));

        // 3. 中文格式日期+星期:2025年12月25日 星期四
        DateTimeFormatter pattern3 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE", zhLocale);
        System.out.println("模式3:" + now.format(pattern3));

        // 4. 12小时制时间(带上午/下午):2025-12-25 06:30:45 下午
        DateTimeFormatter pattern4 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a", zhLocale);
        System.out.println("模式4:" + now.format(pattern4));

        // 5. 含毫秒的完整时间:2025-12-25 18:30:45.123
        DateTimeFormatter pattern5 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println("模式5:" + now.format(pattern5));

        // 6. 简洁中文格式:2025/12/25 下午6:30
        DateTimeFormatter pattern6 = DateTimeFormatter.ofPattern("yyyy/MM/dd a h:mm", zhLocale);
        System.out.println("模式6:" + now.format(pattern6));
    }
}

总结
DateTimeFormatter的模式字母区分大小写,核心区分:H(24 小时)/h(12 小时)、M(月)/m(分)、S(毫秒)/s(秒)。
中文显示星期 / 月份需搭配Locale.SIMPLIFIED_CHINESE,否则会显示英文(如Thursday)。
开发中优先使用组合模式(如yyyy-MM-dd HH:mm:ss),覆盖大部分日期时间格式化场景。

posted @ 2025-12-25 09:25  都是城市惹的祸  阅读(181)  评论(0)    收藏  举报