完成更改應用程序時區的最佳方式是什麼?我看到它的方式必須發生以下事件:grails/mysql時區更改
- 服務器TZ是由系統管理員更改,必須重新啓動
- 的MySQL。
- 數據庫中的每個基於時間的列都必須使用convert_tz或同等值更新所有值。因此,必須編寫mysql腳本或者爲每個類加載每行的grails腳本,以更新所有時間字段。
很顯然,在發生這種情況時應該關閉服務器,備份必須在發生錯誤的地方。
有沒有更好/更簡單的方法來做到這一點?
完成更改應用程序時區的最佳方式是什麼?我看到它的方式必須發生以下事件:grails/mysql時區更改
很顯然,在發生這種情況時應該關閉服務器,備份必須在發生錯誤的地方。
有沒有更好/更簡單的方法來做到這一點?
Java在使用日期時不使用時區;它將所有內容存儲爲UTC,並且僅在顯示日期時使用時區。有關java日期/時間的討論,請參閱以下鏈接。 http://www.odi.ch/prog/design/datetime.php
我們不得不使用GORM和使用groovy.sql.Sql(更快的數據導入)之間的時間差的問題。
GORM使用我們在Bootstrap中設置的grails配置時區(UTC),但groovy sql使用默認系統時區(GMT)。
該問題已通過在$ JAVA_OPTS中設置時區來解決,但您可以將切換添加到grails opts或run-app命令。
grails -Duser.timezone=UTC run-app
我知道這是一個老問題,但我認爲這也是相當永恆......至少,我已經在它最近一個公平的次數跌跌撞撞......所以我想我會貢獻我的解。
首先,我使用Grails 2.5.1和PostgreSQL 9.4作爲後端。
其次,Groovy/Grails中的日期字段在PostgreSQL中存儲爲timestamp without time zone
。所以在我看來,上面的第一個答案實際上並不完全正確 - 日期不以UTC存儲。這個觀察讓我想到了......「如果數據庫不知道時區是什麼,誰會這樣做」?而想到的第一個答案是「也許它是春天」。
第三,我的問題的細節是我有很多日期,我通過BootStrap.groovy
和new ThisClass().save()
引導到數據庫中。因爲這些日期,而不是日期+時間,它們都看起來像2005-11-03 00:00:00
作爲PostgreSQL時間戳(沒有時區)。第四,當我編輯我的一個GSP來在日期格式字符串中包含時區時,真正製造便士下降的是什麼,它顯示爲PST(我的服務器在哪裏);當我在該領域的g:formatDate
中包括timeZone="Asia/Kolkata"
時,時間提前了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將他們即時轉換到服務器的時區,我想這需要一些額外的努力。
就我個人而言,如果g:datePicker
接受timeZone
作爲參數並且以與g:formatDate
相同的方式使用它,那我個人認爲它會很酷。