时区

作者: 金色的清晨 | 来源:发表于2019-07-11 14:58 被阅读0次

    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的配置,转换成相应时区的字符串。

    相关文章

      网友评论

          本文标题:时区

          本文链接:https://www.haomeiwen.com/subject/zztdkctx.html