时区

Java

java程序会取系统默认时区作为Date运算的时区。如果不想跟着系统时区走,可以

-Duser.timezone=GMT #JVM启动时区

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); #写在main函数的第一行

前端传过来的字符串如果不带时区信息,比如2019-07-11,java会认为是当前时区的2019-07-11 00:00:00。
所以要求字符串必须带时区信息,否则解析出来就会有时区差。

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddZ");
        System.out.println(df.getTimeZone());
        Date date = df.parse("2019-07-11+0000");
        System.out.println(date);
        df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        System.out.println(df.format(date));

执行的结果

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
Thu Jul 11 08:00:00 CST 2019
2019-07-11T08:00:00+0800

Java to mysql

Java侧:2019-05-05 UTC+0时区
spring jdbc配置:serverTimezone=GMT%2B8 即+8时区
Mybatis侧

f.`gmt_create` between #{timeStart,jdbcType=TIMESTAMP} and #{timeEnd,jdbcType=TIMESTAMP}

mysql 侧 +8时区

f.`gmt_create` between '2019-05-05 08:00:00.0' and '2019-05-08 07:59:59.999'

当修改jdbc配置:serverTimezone=GMT时

f.`gmt_create` between '2019-05-05 00:00:00.0' and '2019-05-07 23:59:59.999'

总结:spring会将自己的时区根据jdbc的配置,转换成相应时区的字符串。

你可能感兴趣的:(时区)