开发环境和生产环境之间出现奇怪的日期错误
Strange date error between Development and Production environment
我有一个奇怪的日期错误,几天都无法解决,请求您的帮助。
我在 Java/Spring/Vaadin/Hibernate 开发了一款应用程序,用户每天都可以创建运动训练。
问题是训练日期在浏览器中显示不正确。
例如,我现在创建一个新的训练:
training.setTrainingdate(LocalDate.now());
在 localhost 上显示正确但从 Amazon AWS 在线 Tomcat 显示错误日期(一天前)。
MySql 数据库对于这两种情况都是通用的 = Amazon RDS Mysql。
我的时区是 UTC +1 (Europe/Vienna)
2020-02-17
但是当我从 aws 获得训练时在浏览器中显示
2020-02-16
我已经检查过的内容:
- 在 AWS-RDS-MySQL 服务器上:
SELECT now();
2020-02-17 12:55:50
和
SELECT * FROM `mydatabase`.training;
2020-02-17
- SSH 上的 Elastic Beanstalk:
date
Mon Feb 17 11:55:50 UTC 2020
- 日志文件
- /var/log/tomcat8/catalina.out
- /var/log/tomcat8/httpd/access_log
- /var/log/tomcat8/httpd/error_log
2020-02-17 11:55:50.985
无论我什么时候尝试,差异都停留在一天。
不同的设备和不同的浏览器同样的问题。
你有idea可以是什么?
非常感谢!
编辑:
TimeZone.getDefault())
在生产服务器上:
sun.util.calendar.ZoneInfo[id="Universal",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
在本地主机上:
sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
已解决
解决方案:
我给maven添加一个版本mysql-connector-java依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
我加到springapplications.properties:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
和add/change在spring.datasource.url的尾部到:
?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
PS
非常感谢所有试图提供帮助的人!特别感谢@Leif Åstrand 和@PeMa
我有一个奇怪的日期错误,几天都无法解决,请求您的帮助。
我在 Java/Spring/Vaadin/Hibernate 开发了一款应用程序,用户每天都可以创建运动训练。 问题是训练日期在浏览器中显示不正确。 例如,我现在创建一个新的训练:
training.setTrainingdate(LocalDate.now());
在 localhost 上显示正确但从 Amazon AWS 在线 Tomcat 显示错误日期(一天前)。 MySql 数据库对于这两种情况都是通用的 = Amazon RDS Mysql。 我的时区是 UTC +1 (Europe/Vienna)
2020-02-17
但是当我从 aws 获得训练时在浏览器中显示
2020-02-16
我已经检查过的内容:
- 在 AWS-RDS-MySQL 服务器上:
SELECT now();
2020-02-17 12:55:50
和
SELECT * FROM `mydatabase`.training;
2020-02-17
- SSH 上的 Elastic Beanstalk:
date
Mon Feb 17 11:55:50 UTC 2020
- 日志文件
- /var/log/tomcat8/catalina.out
- /var/log/tomcat8/httpd/access_log
- /var/log/tomcat8/httpd/error_log
2020-02-17 11:55:50.985
无论我什么时候尝试,差异都停留在一天。
不同的设备和不同的浏览器同样的问题。
你有idea可以是什么? 非常感谢!
编辑:
TimeZone.getDefault())
在生产服务器上:
sun.util.calendar.ZoneInfo[id="Universal",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
在本地主机上:
sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
已解决
解决方案:
我给maven添加一个版本mysql-connector-java依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
我加到springapplications.properties:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
和add/change在spring.datasource.url的尾部到:
?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
PS 非常感谢所有试图提供帮助的人!特别感谢@Leif Åstrand 和@PeMa