gpt4 book ai didi

java - 关于mysql、java日期和时区的困惑

转载 作者:行者123 更新时间:2023-11-29 13:07:52 25 4
gpt4 key购买 nike

考虑以下实体:

Java : Message (Date registrationDate, Date deliveryDate, Date scheduleDate)
Mysql: message (registration_date datetime, delivery_date datetime, schedule_date date)

让我们假设:

registrationDate = '2014-03-17 20:00:00'  
deliveryDate = '2014-03-17 20:00:00'
scheduleDate = '2014-03-17 20:00:00'

我试图理解为什么我在使用 Hibernate 和 mysql 的以下场景中得到错误的日期:
1º 使用 &useLegacyDatetimeCode=false&serverTimezone=UTC 连接字符串存储日期:
- Registration_date = '2014-03-17 23:00:00'(UTC 格式有效)
- Delivery_date = '2014-03-17 23:00:00'(UTC 格式有效)
- Schedule_date date = '2014-03-17'(UTC 格式)

2° 检索实体并在 View 中显示 (GMT-3):
- RegistrationDdate = '2014-03-17 20:00:00' (确定)
- DeliveryDdate = '2014-03-17 20:00:00'(确定)
- ScheduleDdate = '2014-03-16'(不好,2014-03-17 00:00:00 - 03:00 = 16/03/2014 21:00:00)

我知道当调用 Date.toString 时,它会获取本地时区,但如何避免这种行为?我正确存储了这些值吗?

最初的时间是 17 点,我需要以 17 点检索。

最佳答案

您的应用服务器和 MySQL 似乎相差 3 小时。世界标准时间。

将时区设置为 UTC,然后检索。

示例:

TimeZone.setDefault( TimeZone.getTimezone( "UTC" ) );
scheduleDdate = rs.getDate( "scheduleDdate" );

其他示例:

System.out.println( TimeZone.getDefault() );
Calendar cal = Calendar.getInstance();
Date d = cal.getTime();
System.out.println( " d: " + d );
TimeZone.setDefault(TimeZone.getTimeZone("GMT-3"));
System.out.println( " d(GMT-3): " + d );
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
System.out.println( " d(GMT) : " + d );
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println( " d(UTC) : " + d );

结果:

sun.util.calendar.ZoneInfo[id="IST",offset=19800000,dstSavings=0,
useDaylight=false,transitions=6,lastRule=null]
d: Tue Mar 18 06:41:52 IST 2014
d(GMT-3): Mon Mar 17 22:11:52 GMT-03:00 2014
d(GMT) : Tue Mar 18 01:11:52 GMT 2014
d(UTC) : Tue Mar 18 01:11:52 UTC 2014

关于java - 关于mysql、java日期和时区的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com