项目场景:
调用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.youkuaiyun.com/download/ponypengxin/87712712