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

标签 java mysql hibernate date datetime

考虑以下实体:

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/

相关文章:

java - hibernate.hbm2ddl.import_files : Path to the files

mysql - Symfony2 - Doctrine - 连接 2 个表

java - 多个字段上的 Hibernate Search Facet

java - Glassfish 4.1 + Hibernate 5.2 连接

使用 aws sdk 的 Java Applet 访问被拒绝

java - 在新线程中启动后台服务会卡住主应用程序

Java 使用任务本身的数据终止计时器任务

php - Mysql 创建数据库失败(有点)

mysql - 多对多关系数据库

java - Hibernate session.flush() 导致 ORA-00001 : unique constraint