杰瑞科技汇

Java DateTime如何高效转String?

DateTimeFormatter.format()

所有 java.time 中的日期时间类(如 LocalDate, LocalTime, LocalDateTime, ZonedDateTime 等)都有一个 format() 方法,该方法需要一个 DateTimeFormatter 对象作为参数。

// 1. 创建一个日期时间对象
LocalDateTime now = LocalDateTime.now();
// 2. 创建一个格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 3. 进行格式化
String formattedDateTime = now.format(formatter);
System.out.println("原始时间: " + now);
System.out.println("格式化后字符串: " + formattedDateTime);
// 输出可能类似于:
// 原始时间: 2025-10-27T15:30:45.123456789
// 格式化后字符串: 2025-10-27 15:30:45

格式化 LocalDateTime (日期和时间)

LocalDateTime 是最常用的类,它不包含时区信息。

常用格式示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeFormatExample {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        // 格式1: yyyy-MM-dd HH:mm:ss (最常用)
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式1: " + now.format(formatter1)); // e.g., 2025-10-27 15:30:45
        // 格式2: yyyy/MM/dd HH:mm:ss
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println("格式2: " + now.format(formatter2)); // e.g., 2025/10/27 15:30:45
        // 格式3: yyyy年MM月dd日 HH时mm分ss秒 (中文格式)
        DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
        System.out.println("格式3: " + now.format(formatter3)); // e.g., 2025年10月27日 15时30分45秒
        // 格式4: yyyy-MM-dd'T'HH:mm:ss (ISO 8601标准格式)
        DateTimeFormatter formatter4 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        System.out.println("格式4: " + now.format(formatter4)); // e.g., 2025-10-27T15:30:45.123456789
    }
}

DateTimeFormatter 常用模式字母:

字母 含义 示例
y yyyy (2025), yy (23)
M MM (10), M (10), MMMM (十月)
d dd (27), d (27)
H 小时 (24小时制) HH (15), H (15)
h 小时 (12小时制) hh (03), h (3)
m 分钟 mm (30), m (30)
s ss (45), s (45)
S 纳秒 SSSSSS (123456)
a 上午/下午标记 AMPM
E 星期几 E (五), EEEE (星期五)
转义文字,用于引号 'at' 会显示为 at

格式化 LocalDate (仅日期)

如果你只需要处理日期部分,使用 LocalDate

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateFormatExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        // 格式1: yyyy-MM-dd
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println("格式1: " + today.format(formatter1)); // e.g., 2025-10-27
        // 格式2: yyyy年MM月dd日
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        System.out.println("格式2: " + today.format(formatter2)); // e.g., 2025年10月27日
        // 格式3: ISO 8601标准格式
        DateTimeFormatter formatter3 = DateTimeFormatter.ISO_LOCAL_DATE;
        System.out.println("格式3: " + today.format(formatter3)); // e.g., 2025-10-27
    }
}

格式化 LocalTime (仅时间)

如果你只需要处理时间部分,使用 LocalTime

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class LocalTimeFormatExample {
    public static void main(String[] args) {
        LocalTime now = LocalTime.now();
        // 格式1: HH:mm:ss
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("HH:mm:ss");
        System.out.println("格式1: " + now.format(formatter1)); // e.g., 15:30:45
        // 格式2: hh:mm:ss a
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("hh:mm:ss a");
        System.out.println("格式2: " + now.format(formatter2)); // e.g., 03:30:45 PM
        // 格式3: ISO 8601标准格式
        DateTimeFormatter formatter3 = DateTimeFormatter.ISO_LOCAL_TIME;
        System.out.println("格式3: " + now.format(formatter3)); // e.g., 15:30:45.123456789
    }
}

格式化带时区的 ZonedDateTime / OffsetDateTime

当你需要处理不同时区的时间时,应该使用 ZonedDateTimeOffsetDateTime,格式化时,时区信息也可以被包含在字符串中。

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class ZonedDateTimeFormatExample {
    public static void main(String[] args) {
        // 获取当前系统默认时区的时间
        ZonedDateTime now = ZonedDateTime.now();
        // 格式1: 不带时区信息 (只格式化日期和时间部分)
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式1 (无时区): " + now.format(formatter1)); // e.g., 2025-10-27 15:30:45
        // 格式2: 带时区信息 (使用 XXX 表示时区偏移量)
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss XXX");
        System.out.println("格式2 (带偏移量): " + now.format(formatter2)); // e.g., 2025-10-27 15:30:45 +08:00
        // 格式3: 带时区名称 (使用 zzz 表示时区名称)
        DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz");
        System.out.println("格式3 (带时区名): " + now.format(formatter3)); // e.g., 2025-10-27 15:30:45 CST
        // 格式4: ISO 8601标准格式 (自动包含时区信息)
        DateTimeFormatter formatter4 = DateTimeFormatter.ISO_ZONED_DATE_TIME;
        System.out.println("格式4 (ISO): " + now.format(formatter4)); // e.g., 2025-10-27T15:30:45.123456789+08:00[Asia/Shanghai]
    }
}

旧版 java.util.Date 的转换 (不推荐,但需了解)

如果你正在维护旧代码,可能会遇到 java.util.DateDate 本身不包含格式信息,它的 toString() 方法输出的是固定格式,要将其格式化为特定字符串,需要先转换为新的 java.time 对象。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.time.ZoneId;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class OldDateConversion {
    public static void main(String[] args) {
        // --- 方法1: 使用旧的 SimpleDateFormat (不推荐线程安全) ---
        Date oldDate = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedOldWay = sdf.format

Java DateTime如何高效转String?-图1

Java DateTime如何高效转String?-图2

Java DateTime如何高效转String?-图3

分享:
扫描分享到社交APP
上一篇
下一篇