dromara/hutool

DateUtil在使用graalvm打包native之后,会有时区问题

Closed this issue · 2 comments

版本情况

JDK版本: openjdk_17
hutool版本: 5.8.27(请确保最新尝试是否还有问题)

问题描述(包括截图)

  1. 复现代码

在linux环境上海时区,代码也设置了默认时区 TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
DateUtil.date能够获取正确当前时间,转字符串后,会重复增加时区

    System.out.println("DateUtil.date " + DateUtil.date());
    System.out.println("DateUtil.now " + DateUtil.now());

    var date = DateUtil.parse("2024-04-30 00:02:05");
    var startTime = DateUtil.beginOfDay(date).toStringDefaultTimeZone();
    var endTime = DateUtil.endOfDay(date).toStringDefaultTimeZone();
  1. 堆栈信息

  2. 测试涉及到的文件(注意脱密)
    image

比如报错的Excel文件,有问题的图片等。

looly commented

我本地使用GraalVM确实没有复现,猜测:

  1. DateUtil.now()使用缓存中的format,你修改了defaultTimeZone,但是缓存中未修改。

因此尝试手动设置下DateTime的timezone试下。

 var date = DateUtil.parse("2024-04-30 00:02:05")
date.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
date.toString();

我本地使用GraalVM确实没有复现,猜测:

  1. DateUtil.now()使用缓存中的format,你修改了defaultTimeZone,但是缓存中未修改。

因此尝试手动设置下DateTime的timezone试下。

 var date = DateUtil.parse("2024-04-30 00:02:05")
date.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
date.toString();

使用quarkus打包graalvm,新建个干净的quarkus项目试试