java根据时区转换获取时间的方法

方法一:

复制代码
 public static void main(String[] args) {
        // 假设这是从MySQL获取的UTC时间字符串
        String utcTimeStr = "2024-09-30T16:00:00Z";
        try {
            // 解析UTC时间字符串
            DateTime parsedDateTime = DateUtil.parse(utcTimeStr);
            // 转换为指定时区时间
            DateTime shanghaiDateTime = DateUtil.convertTimeZone(parsedDateTime, ZoneId.of("Asia/Shanghai"));
            // 转换为GMT时间
            DateTime gmtDateTime = DateUtil.convertTimeZone(parsedDateTime, ZoneId.of("Etc/GMT"));
            // 格式化输出
            System.out.println("格式化输出"+shanghaiDateTime);
            // 输出GMT时间
            System.out.println("输出GMT时间"+gmtDateTime);
            // 格式化输出
            String format1 = DateUtil.format(shanghaiDateTime, "yyyy-MM-dd HH:mm:ss");
            String format2 = DateUtil.format(gmtDateTime, "yyyy-MM-dd HH:mm:ss");
            // 输出转换后的时间字符串
            System.out.println("格式化[Asia/Shanghai]输出"+format1);
            // 输出GMT时间字符串
            System.out.println("格式化[Etc/GMT]输出"+format2);
        } catch (Exception e) {
            System.err.println("时间解析或转换失败: " + e.getMessage());
        }
    }

控制台输出如下:

复制代码
格式化输出2024-10-01 00:00:00
输出GMT时间2024-09-30 16:00:00
格式化[Asia/Shanghai]输出2024-10-01 00:00:00
格式化[Etc/GMT]输出2024-09-30 16:00:00

方法二:

复制代码
 /**
     * 时间字符串转换为指定时区时间字符串
     * @param dateStr 时间字符串
     * @param zoneId  时区ID
     * @return 指定时区时间字符串
     */
    private static String timeZoneConvert(String dateStr, String zoneId) {
        DateTime parse = DateUtil.parse(dateStr);
        log.info("原始时间:{}", parse);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        // 设置时区:例如:Asia/Shanghai
        sdf.setTimeZone(TimeZone.getTimeZone(zoneId));
        String str = sdf.format(parse);
        log.info("转换后时间:{}", str);
        return str;
    }
复制代码
public static void main(String[] args) {
        // UTC时间字符串转化为指定时区时间字符串
        String dateStr = "2024-09-30T16:00:00Z";
        // 时区ID
        String zoneId = "GMT+8";
        // 时间转换处理
        String dateFormatStr = timeZoneConvert(dateStr, zoneId);
        // 输出转换后的时间字符串
        System.out.println("原始时间字符串:" + dateStr);
        // 输出转换后的时间字符串
        System.out.println("转换后的时间字符串:" + dateFormatStr);
    }

控制台输出如下:

复制代码
0:54:12.158 [main] INFO com.songwp.test.Test05 - 原始时间:2024-09-30 16:00:00
10:54:12.161 [main] INFO com.songwp.test.Test05 - 转换后时间:2024-10-01 00:00:00
原始时间字符串:2024-09-30T16:00:00Z
转换后的时间字符串:2024-10-01 00:00:00
相关推荐
岁岁养乐多17 分钟前
Java 序列化相关问题
java·开发语言
小短腿乄1 小时前
java实现pdf加水印+签名
java·开发语言·pdf
云烟成雨TD1 小时前
Micrometer 系列【29】源码分析:MeterRegistry 实例化流程
java·云原生·micrometer
聆风吟º1 小时前
【金仓数据库征文】Java 应用接入金仓数据库:从驱动、连接池到存储过程调试的踩坑实录
java·开发语言·数据库
似璟如你3 小时前
Java 开发者的 Go 语法基础:从 0 开始快速上手 Go
java·开发语言·后端·golang·go·编程语言
zzz_23683 小时前
TencentDB-Agent-Memory 深度解析:让多个 Agent 共享项目经验的记忆中枢
java·开发语言·jvm·人工智能·agent·memory·tencent db
vx-程序开发3 小时前
django医院预约挂号系统---附源码23353
java·javascript·spring boot·python·eclipse·django·php
金斗潼关3 小时前
ysoserial的使用
java
ruleslol3 小时前
volatile 关键字
java
lilian2334 小时前
Harmony os 技术实战|拼豆制图10:把取消、解析失败和保存失败写成可恢复状态机
java·javascript·华为·harmonyos