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

2020-10-14 15:20:27 +08:00
 Comma
头大了,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 个小时, 导致保存到数据库时间戳字段报错
1693 次点击
所在节点    程序员
16 条回复
wakzz
2020-10-14 15:37:47 +08:00
从来没见人用这个类的,都是 java 自带的 Date
pomony
2020-10-14 15:39:22 +08:00
不能用 LocalDateTime 嘛
nekoneko
2020-10-14 15:45:08 +08:00
你想干啥,24*3600 你觉得是多少毫秒,不再乘个 1000 吗?
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
2020-10-14 15:50:06 +08:00
Timestamp(long time)
Constructs a Timestamp object using a milliseconds time value.
knightdf
2020-10-14 16:15:23 +08:00
大哥好好看 API 文档
Comma
2020-10-14 16:56:17 +08:00
@nekoneko 感谢回复,是为了设置个默认值,惭愧当时写的时候少写了个 1000,不过不影响实际结果。当前已经规避了问题,只是目前想找到问题出现的原因
Comma
2020-10-14 16:57:08 +08:00
@pomony 这个是历史代码,实际上我自己都是用 Long 型的时间戳值
Comma
2020-10-14 16:57:57 +08:00
@wakzz 确实这个类当时写代码的人说为了跟数据库字段一致,数据库用 timestamp 为了方便查看....
Comma
2020-10-14 16:59:50 +08:00
@knightdf 文档及源码已看,感谢建议。还是没找到这个问题出现的原因,不知道为何那个环境下差了 14 小时
lululau
2020-10-14 17:28:12 +08:00
可能是 user.timezone 属性没设上,走的还是操作系统的默认时区设置,换成 "Asia/Shanghai" 试试
socket1q1
2020-10-14 17:44:08 +08:00
看起来像是一个时区问题
manecocomph
2020-10-14 19:11:55 +08:00
@Comma https://www.cnblogs.com/zhuitian/p/12436300.html 连接字符串的时区设置试试.
manecocomph
2020-10-14 19:13:33 +08:00
如果在中国 一般设置: serverTimezone=GMT%2B8
https://www.sohu.com/a/320708874_418879
bruceliang
2020-10-15 09:33:09 +08:00
换个 jdk 试试呢
bruceliang
2020-10-15 09:34:05 +08:00
输出当前时区信息看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX