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
相关推荐
single59416 分钟前
【c++笔试强训】(第五篇)
java·开发语言·c++·vscode·学习·算法·牛客
独自等待你25 分钟前
java 泛型中的 ?
java
枫叶落雨22236 分钟前
mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释
xml·java·mybatis
double丶flower36 分钟前
mybatis在mapper.xml中怎么处理大于、小于、不等于号
xml·java·mybatis
一只爱打拳的程序猿38 分钟前
pom.xml和spring-config.xml
xml·java·spring
tonysh_zds39 分钟前
freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题
xml·java·开发语言
软件聚导航40 分钟前
在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样
java·前端·uni-app
将登太行雪满山_1 小时前
自存 关于RestController请求传参数 前端和后端相关
java·前端·spring boot
吴冰_hogan1 小时前
nacos配置中心入门
java·spring boot·spring·springcloud
泰山小张只吃荷园1 小时前
通过SpringTask模拟打印机定时向数据库传入模拟数据
java·开发语言·后端·spring·mybatis