2012-01-17 48 views
4

希望有人能幫助澄清這個非常惱人的情況,我發現自己與Grails &日期&時區,因爲我的理解不完整。Grails問題與時區和格式日期

要描述的情況,首先我在英國,應用程序是在服務器是在美國(CST)

用戶登錄到我的應用程序,我必須保持自己的時區的唯一一個場格式化日期的目的可靠地適合其位置。

當應用程序啓動時,我強制執行UTC的默認時區,並且我還在應用程序的其他地方使用了一些Joda日期,因此我將Joda DateTimeZone也設置爲UTC。但是,我只能真正使用喬達的固定日期,在提交時不應該改變。

因此,在引導我TimeZone.setDefault(TimeZone.getTimeZone(「UTC」))

現在的問題,對於某些表我要記錄在用戶互動等有所謂的「日期字段上次更改時間',當記錄更新時,我只是將它設置爲一個新的日期()

我使用ajax調用來呈現數據,而不是直接在GSP中顯示它的字段,它在控制器中被預處理,格式化我創建一個格式化與

DateTimeZone dtz = DateTimeZone.forID(user.timeZone) 
def DateTimeFormatter tzAwareLongFormatter = DateTimeFormat.forPattern('MM/dd/yyyy HH:mm').withZone(dtz); 

我認爲這將是完美的,日期將持有UTC,然後作爲歐洲/倫敦的用戶tz我會看到格式正確的日期。

但是我得到的時間+7小時

所以它的作用就像它的存儲根據它會在服務器位置是什麼,即使我設置BootStrap.groovy中的默認時間的日期時間。

有什麼我應該設置,而不必訴諸於改變服務器時間本身?

+0

似乎在bootstrap中設置默認TZ是不夠的,我不得不將-Duser.timezone = UTC添加到JAVA_OPTS,到目前爲止它顯示的日期顯示正確。 – Dave 2012-01-17 18:22:24

+0

請將此貼爲您對此問題的回答,並將其標記爲正確。 – 2012-03-12 14:07:11

回答

1

看來,在設置引導默認TZ是不夠的,我不得不添加

-Duser.timezone=UTC 

到JAVA_OPTS,到目前爲止,它出現的日期是否正確顯示。