项目场景:

调用minio的方法创建桶失败


问题描述

Unable to obtain ZonedDateTime from TemporalAccessor: {},ISO resolved to xxx of type...

   ZonedDateTime date = ZonedDateTime.now();
    requestBuilder.header("x-amz-date", date.format(Time.AMZ_DATE_FORMAT));

原因分析:

刚开时以为是系统时区问题,因为新部署的一台服务器

public class Test {
  public static void main(String[] args) {
    System.out.println(TimeZone.getDefault());
  }
}

输出

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]
确认时区没有问题。

后面觉得是服务器系统问题,因为本地使用的jdk版本和依赖jar的版本和服务器上的一致的,本地没有任何问题。于是用虚拟机重新搭建了 windows server 2012 的环境,

jdk版本是 jdk1.8.0_11

mino 依赖 8.0.3

测试代码

import io.minio.Time;
import java.time.ZonedDateTime;
import java.util.TimeZone;

public class Test {
  public static void main(String[] args) {
    ZonedDateTime date = ZonedDateTime.now();
    String  before = "20230421T021723Z";
    System.out.println(before);
    TimeZone.getDefault();
    ZonedDateTime after = ZonedDateTime.parse(before, Time.AMZ_DATE_FORMAT);
    System.out.println(after);
  }
}

确实重现了问题。但是系统版本不能更换只能尝试更换jdk 和 minio的版本。最终通过升级jdk的版本解决了问题


解决方案:

jdk从1.8_11升级成 jdk.1.8_281

资源连接地址:https://download.csdn.net/download/ponypengxin/87712712

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐