代码之家  ›  专栏  ›  技术社区  ›  hvgotcodes

grails/mysql时区更改

  •  2
  • hvgotcodes  · 技术社区  · 14 年前

    改变应用程序时区的最佳方法是什么?在我看来,必须发生以下情况:

    1. mysql必须重新启动。

    显然,在发生这种情况时应该关闭服务器,并且备份必须在发生错误时就位。

    3 回复  |  直到 11 年前
        1
  •  3
  •   Matt Lachman    7 年前
        2
  •  2
  •   MonetsChemist    9 年前

    我知道这是一个老问题,但我认为它也相当永恒。。。至少,我最近偶然发现了很多次。。。所以我想我会贡献我的解决方案。

    其次,Groovy/Grails中的日期字段存储为 timestamp without time zone

    第三,我的问题是,我有很多日期,我引导到数据库通过 BootStrap.groovy new ThisClass().save() . 因为这些是日期,而不是日期+时间,它们看起来都像 2005-11-03 00:00:00 作为PostgreSQL时间戳(没有时区)。

    第四,真正让我大跌眼镜的是,我编辑了一个gsp,将时区包含在日期格式字符串中,显示为PST(我的服务器所在的位置);当我包括 timeZone="Asia/Kolkata" g:formatDate 在所讨论的领域中,时间提前了12小时30分。很明显,我的服务器是在PST8PDT上运行的,因为那不是PostgreSQL,所以我回到Spring,作为一个可能改变事情的地方。

    grails-app/conf/spring/resources.groovy

    // Place your Spring DSL code here
    beans = {
        // from http://stackoverflow.com/questions/1569446/grails-how-to-change-the-current-locale
        localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
            defaultLocale = new Locale("en","IN")
            java.util.Locale.setDefault(defaultLocale)
            println "configure spring/resources.groovy defaultLocale $defaultLocale"
            defaultTimeZone = TimeZone.getTimeZone("Asia/Kolkata")
            java.util.TimeZone.setDefault(defaultTimeZone)
            println "configure spring/resources.groovy defaultTimeZone $defaultTimeZone"
        }
    }
    

    我也用过 g:format timezone="Asia/Kolkata" format="dd MMM, yyyy a z" 我所有的日期字段。这似乎解释了PostgreSQL中的所有数据 timestamp 正确时区和预期时间(即输入的时间)的字段,即使日期第一次输入“在错误的时区”。

    第六, g:datePicker -我读了很多关于使这个“时区敏感”的帖子,但是我发现它的日期被解释为Spring使用的时区,所以在我的例子中,这正是我需要的。相反,如果有人想在他们的区域设置中输入日期,并让Spring动态地将其转换为服务器的时区,我想这需要一些额外的工作。

    认可的 timeZone 并以相同的方式使用它 g:格式化日期

        3
  •  1
  •   chim    12 年前

    我们在使用GORM和使用groovy.sql.sql(为了更快的数据导入)之间的时间差上遇到了问题。

    GORM使用的是我们在引导中设置的grails配置时区(UTC),而groovy sql使用的是默认的系统时区(GMT)。

    通过在$javaopts中设置时区,问题得到了解决,不过您可以将开关添加到grails OPTS或runapp命令中。

    grails -Duser.timezone=UTC run-app