将给定的ISO 8601格式的时间字符串 “2024-10-15T16:00:00.000Z“ 转换为北京时区工具类 DateUtils

当然,下面是一个Java工具类 DateUtils 的示例,它包含了将给定的ISO 8601格式的时间字符串转换为北京时区(UTC+8)的 java.util.Date 类型的方法。这个工具类还包括了一些辅助方法,以便于日期和时间的处理。

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

public class DateUtils {

    private static final String BEIJING_ZONE_ID = "Asia/Shanghai";
    private static final DateTimeFormatter ISO_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
    private static final DateTimeFormatter DATE_ONLY_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    // 将ISO 8601格式的时间字符串转换为北京时区的Date类型
    public static Date convertIsoToBeijingDate(String isoDateTime) {
        // 解析ISO 8601时间字符串为Instant
        Instant instant = Instant.from(ISO_DATE_TIME_FORMATTER.parse(isoDateTime));

        // 转换为北京时区的ZonedDateTime
        ZonedDateTime beijingDateTime = instant.atZone(ZoneId.of(BEIJING_ZONE_ID));

        // 获取当天开始时刻的Instant,并转换为Date
        return Date.from(beijingDateTime.toLocalDate().atStartOfDay(ZoneId.of(BEIJING_ZONE_ID)).toInstant());
    }

    // 将Date对象格式化为"YYYY-MM-DD"字符串
    public static String formatDate(Date date) {
        if (date == null) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.of(BEIJING_ZONE_ID)).format(DATE_ONLY_FORMATTER);
    }

    // 主方法用于测试
    public static void main(String[] args) {
        // 测试转换
        String isoDateTime = "2024-10-15T16:00:00.000Z";
        Date beijingDate = convertIsoToBeijingDate(isoDateTime);
        System.out.println("Converted Date: " + beijingDate);

        // 测试格式化
        String formattedDate = formatDate(beijingDate);
        System.out.println("Formatted Date: " + formattedDate); // 应该输出:2024-10-16
    }
}

工具类说明

  • convertIsoToBeijingDate 方法:

    • 接受一个ISO 8601格式的时间字符串。
    • 使用 DateTimeFormatter 解析该字符串为 Instant 对象。
    • Instant 对象转换为北京时区的 ZonedDateTime
    • 提取日期部分并转换为当天开始时刻的 Instant
    • 最后返回 java.util.Date 类型的对象。
  • formatDate 方法:

    • 接受一个 java.util.Date 对象。
    • 将其转换为北京时区的 LocalDate 并格式化为 “YYYY-MM-DD” 格式的字符串。
  • main 方法:

    • 用于测试上述两个方法的功能。

你可以根据需要扩展这个工具类,添加更多的日期处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值