我在angular datepicker中选择日期为2019年2月8日,在java侧日志中,它被打印为 Fri Feb 08 00:00:00 SGT 2019
但在数据库中它存储为 07/02/2019 16:00:00
我在db端使用datetime格式。以及 java.util.date
在 java 。如果我尝试使用它存储的数据库中的相同日期获取数据,这种情况会非常随机地发生 08/02/2019 00:00:00.
数据库时区是sgt。
为什么会这样?
[编辑]我选择的日期是2019年2月8日,而不是2月2日。。对不起的
3条答案
按热度按时间ghhaqwfi1#
api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。将所选日期转换为
OffsetDateTime
并将其保存到数据库中。下面演示如何将日期字符串转换为OffsetDateTime
:输出:
现在,你可以用
OffsetDateTime
在jdbc代码中:这就是如何从数据库中检索值:
从trail:date-time了解现代日期时间api。
z9gpfhce2#
财产
serverTimezone
有价值的SGT
应添加到jdbc连接字符串:来自mysql文档:6.3.11 datetime类型处理
hgc7kmma3#
这个
SGT
在Fri Feb 08 00:00:00 SGT 2019
表示时区,而在db中有utc时间。这两个时代是历史上完全相同的时刻。在浏览器中选择日期总是发生在用户的时区。如果你想用utc来计算时间,你需要对此进行调整。