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
相关推荐
吴声子夜歌3 小时前
Java——开发中通用的方法和准则(二)
java·开发语言·php
袁震3 小时前
HarmonyOS 应用包体积优化与上架自检实战:从 76.2MB 到 3.6MB
java·华为·性能优化·harmonyos
zcmodeltech3 小时前
反应装置模型控制系统设计与实现:多设备协同联动方案
java·网络·数据库·stm32·嵌入式硬件·能源·制造
码视野3 小时前
基于 Spring Boot + Vue3 的【城市地下燃气管网微泄漏感知与相邻地下空间燃爆预警中台】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端
2601_962071574 小时前
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
java·开发语言·数据库
梦想的旅途24 小时前
如何高效调用企业微信通讯录API管理组织架构
java·开发语言·企业微信
2601_962065254 小时前
2.启动mysql容器
java·数据库·mysql
2601_962065494 小时前
PHP For 循环
android·java·php
2601_962201724 小时前
Java进阶,集合,Colllection,常见数据结构
java·数据结构·windows
彷徨而立4 小时前
【C/C++】多线程读写普通 int 变量的一些问题
java·c语言·c++