V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Comma
V2EX  ›  程序员

[ Java ] 求教 V 友 Java 大神 Java .sql.Timestamp 类型获取时间结果偏差

  •  
  •   Comma · 2020-10-14 15:20:27 +08:00 · 1858 次点击
    这是一个创建于 1485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    头大了,google 、百度未果,请教万能的 V 友,有没有遇到类似问题的或者定位这个问题的思路
    以下代码:

    Timestamp timestamp = new Timestamp(24*3600);
    System.out.println(timestamp);

    //期望结果: 1970-01-01 08:01:26.4
    //实际结果:1969-12-31 18:01:26.4
    //System.currentTimeMillis()值符合预期

    //本地输出结果符合期望,开发服务器符合期望
    //特定网络环境服务器(无法登录、无法远程调试,环境符合预期已经设置 JVM 参数: -Duser.timezone=GMT+8 )结果少了 14 个小时, 导致保存到数据库时间戳字段报错
    wakzz
        1
    wakzz  
       2020-10-14 15:37:47 +08:00
    从来没见人用这个类的,都是 java 自带的 Date
    pomony
        2
    pomony  
       2020-10-14 15:39:22 +08:00
    不能用 LocalDateTime 嘛
    nekoneko
        3
    nekoneko  
       2020-10-14 15:45:08 +08:00   ❤️ 1
    你想干啥,24*3600 你觉得是多少毫秒,不再乘个 1000 吗?
    nekoneko
        4
    nekoneko  
       2020-10-14 15:46:08 +08:00
    本地运行
    ```
    Timestamp timestamp = new Timestamp(24*3600);
    System.out.println(timestamp);
    ```
    期望结果 : 1970-01-01 08:01:26.4
    实际结果 : 1970-01-01 08:01:26.4
    xx6412223
        5
    xx6412223  
       2020-10-14 15:50:06 +08:00   ❤️ 1
    Timestamp(long time)
    Constructs a Timestamp object using a milliseconds time value.
    knightdf
        6
    knightdf  
       2020-10-14 16:15:23 +08:00   ❤️ 1
    大哥好好看 API 文档
    Comma
        7
    Comma  
    OP
       2020-10-14 16:56:17 +08:00
    @nekoneko 感谢回复,是为了设置个默认值,惭愧当时写的时候少写了个 1000,不过不影响实际结果。当前已经规避了问题,只是目前想找到问题出现的原因
    Comma
        8
    Comma  
    OP
       2020-10-14 16:57:08 +08:00
    @pomony 这个是历史代码,实际上我自己都是用 Long 型的时间戳值
    Comma
        9
    Comma  
    OP
       2020-10-14 16:57:57 +08:00
    @wakzz 确实这个类当时写代码的人说为了跟数据库字段一致,数据库用 timestamp 为了方便查看....
    Comma
        10
    Comma  
    OP
       2020-10-14 16:59:50 +08:00
    @knightdf 文档及源码已看,感谢建议。还是没找到这个问题出现的原因,不知道为何那个环境下差了 14 小时
    lululau
        11
    lululau  
       2020-10-14 17:28:12 +08:00   ❤️ 1
    可能是 user.timezone 属性没设上,走的还是操作系统的默认时区设置,换成 "Asia/Shanghai" 试试
    socket1q1
        12
    socket1q1  
       2020-10-14 17:44:08 +08:00
    看起来像是一个时区问题
    manecocomph
        13
    manecocomph  
       2020-10-14 19:11:55 +08:00
    @Comma https://www.cnblogs.com/zhuitian/p/12436300.html 连接字符串的时区设置试试.
    manecocomph
        14
    manecocomph  
       2020-10-14 19:13:33 +08:00   ❤️ 1
    如果在中国 一般设置: serverTimezone=GMT%2B8
    https://www.sohu.com/a/320708874_418879
    bruceliang
        15
    bruceliang  
       2020-10-15 09:33:09 +08:00
    换个 jdk 试试呢
    bruceliang
        16
    bruceliang  
       2020-10-15 09:34:05 +08:00
    输出当前时区信息看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3104 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:48 · PVG 20:48 · LAX 04:48 · JFK 07:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.