我会尽量把我面临的问题说得尽可能清楚。
我有一个带有datecreated字段的注册域。
我有一个旧的Grails 2. 2应用程序,使用MySQL 5. 7。该应用程序使用时区US/Mountain运行。
当我用mysql 5.7在grails 2.2中创建一个注册表时,日期存储为美国/山区时间,如下所示。
我已将grails 2.2应用程序升级到grails 4.0.10。新的grails 4.0.10应用程序使用mysql 8。新应用程序运行正常,但它以UTC时区存储日期,即使我在build.gradle文件中将时区传递为
bootRun {
ignoreExitValue true
jvmArgs(
'-Dspring.output.ansi.enabled=always',
'-Duser.timezone=US/Mountain',
'-Dgrails.server.port.https=8443',
'-Dgrails.server.port.http=8080',
// '-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true',
'-noverify',
'-XX:TieredStopAtLevel=1',
'-Xmx1024m')
sourceResources sourceSets.main
String springProfilesActive = 'spring.profiles.active'
systemProperty springProfilesActive, System.getProperty(springProfilesActive)
}
不过读起来像我们/山一样好。
下面是grails 4.0.10以utc时区存储的日期时间。
现在我面临的问题是。我们有生产数据存储在MySQL 5. 7中,其中日期存储在US/Mountain中。
我正在把数据传输到mysql 8中,以用于新的应用程序。我从mysql5.7下载了数据作为.sql文件。然后我把.sql文件导入到在我的本地系统中运行的mysql 8中。导入工作正常。当我运行新的grails4.0.10应用程序时,我可以看到日期时间都偏离了7个小时。这是意料之中的,因为grails4.0。10期望数据库中的日期为UTC格式,但mysql 5.7数据为US/Mountain格式。
我知道解决这个问题的唯一方法是手动将mysql 5.7中的所有日期转换为UTC,然后将文件导入到mysql 8中,这样grails 4.0.10就可以正常工作了,因为它需要UTC格式的日期时间。
我很感激任何对我几天来所面临的困境的见解。
先谢谢你了!
1条答案
按热度按时间vltsax251#
应用程序中的这一行.yml做到了。
由于我正在将以US/Mountain格式存储日期时间的mysql 5.7数据导入mysql 8,因此我需要告诉grails 4将日期时间解释为US/Mountain,而不是默认的UTC。
感谢grails slack社区的olavgg。grails.slack.com对我的帮助。