Java日期格式化方法总结

在Java中,日期格式化主要涉及将 DateLocalDateLocalDateTime 等日期时间对象转换为指定格式的字符串,或将字符串解析为日期对象。以下是两种常用的日期格式化方式:


一、使用 SimpleDateFormat(旧版API,Java 8之前)

SimpleDateFormat 是Java早期版本中用于格式化和解析日期的类,但它是非线程安全的,需谨慎使用。

1. 格式化为字符串

java

复制

下载

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(date);
        System.out.println(formattedDate); // 例如:2023-10-05 15:30:45
    }
}
2. 字符串解析为日期

java

复制

下载

String dateStr = "2023-10-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateStr); // 需处理 ParseException
常用模式符号:
  • yyyy:四位年份(如2023)

  • MM:两位月份(01-12)

  • dd:两位日期(01-31)

  • HH:24小时制小时(00-23)

  • hh:12小时制小时(01-12)

  • mm:分钟(00-59)

  • ss:秒(00-59)

  • SSS:毫秒(000-999)

  • E:星期几(如Mon、Tue)


二、使用 DateTimeFormatter(新版API,Java 8+)

Java 8引入了 java.time 包,提供了线程安全的 LocalDateLocalDateTime 和 DateTimeFormatter

1. 格式化为字符串

java

复制

下载

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

public class Main {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDate = now.format(formatter);
        System.out.println(formattedDate); // 例如:2023-10-05 15:30:45
    }
}
2. 字符串解析为日期

java

复制

下载

String dateStr = "2023-10-05 15:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter); // 需处理 DateTimeParseException
3. 预定义的格式

java

复制

下载

// 使用内置标准格式(如ISO日期时间格式)
String isoFormat = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// 输出:2023-10-05T15:30:45.123
常用模式符号(与旧版类似,但更严格):
  • uuuu:四位年份(替代yyyy,推荐使用)

  • MM/dd/HH/mm/ss:同上

  • a:上午/下午标记(如AM/PM)


三、时区处理

若需处理时区,可使用 ZonedDateTime

java

复制

下载

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

ZonedDateTime zonedDateTime = ZonedDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
String formatted = zonedDateTime.format(formatter); // 例如:2023-10-05 15:30:45 CST

四、注意事项

  1. 线程安全

    • SimpleDateFormat 非线程安全,多线程环境下需同步或使用ThreadLocal。

    • DateTimeFormatter 是线程安全的,可全局共享。

  2. 错误处理

    • 解析字符串时需捕获 ParseException(旧版)或 DateTimeParseException(新版)。

  3. 性能

    • 新版API(java.time)性能更优,推荐使用。


完整示例(Java 8+)

java

复制

下载

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

public class DateTimeExample {
    public static void main(String[] args) {
        // 格式化
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm");
        String formatted = now.format(formatter);
        System.out.println("当前时间:" + formatted); // 例如:2023年10月05日 15:30

        // 解析
        String dateStr = "2023年12月31日 23:59";
        LocalDateTime parsedDate = LocalDateTime.parse(dateStr, formatter);
        System.out.println("解析后的时间:" + parsedDate);
    }
}

建议优先使用 java.time 包(Java 8+),其设计更现代且线程安全。旧版 SimpleDateFormat 仅适用于兼容遗留代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值