2015-10-14 11 views
0

我正在使用grails 2.4.4構建restful API。我在計算Grails默認時區設置時遇到了很多麻煩。
問題的前提是我在config.groovy中使用默認的grails設置而不使用dateBinders,我的mysql和應用程序服務器的時區在NPT中。構建API時Grails默認時區性質


所以我張貼一個JSON像

{"clusterStartTime":"2015-10-15T17:45:00Z"} 

現在,這是一個ISO 8601格式。那麼這個日期格式如何代表我的時區,Grails可以解釋它呢?
在數據庫中,它被保存爲2015-10-15 17:45:00。 但是,當我得到這個資源我得到:

{"clusterStartTime": "2015-10-15T12:00:00Z"} 

所以我正在用的5:45這是NPT偏移偏移的時間。那麼Grails如何做這一切?

所以在生產中我有一臺NPT時區的服務器,所以我怎樣才能在UTC時區保存所有日期,並且只使用grails在UTC時區吐出日期而不設置Java環境變量?

回答

0

在你BootStrap.groovy中這樣設置時區:

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Katmandu"))  

NTP不直接支持。要獲得支持的時區列表,請參閱TimeZone.getAvailableIDs()的輸出。

爲了正確解釋任何ISO 8601的日期,你必須使用一個好的解析器。由javax.xml.bind.DatatypeConverter提供的應該足夠好。方法parseDateTime需要lexicalXSDDateTime,它必須符合ISO 6801標準。

因此試試這個:

def cal = javax.xml.bind.DatatypeConverter.parseDateTime('2015-10-15T17:45:00Z') 
    def d = cal.getTime() 
    def t1 = new TestClass(myDate: d).save(failOnError:true) 
    println t1.myDate //Thu Oct 15 17:45:00 NPT 2015 

的日期會保存考慮到你所定義的時區數據庫(例如在DATETIME場),所以當你找回它,它應該是正確的。

+0

對於遲到的回覆感到抱歉,但是當我將我的應用程序的時區設置爲UTC並保存到mysql服務器時,它會在5:45(在mysql中保存的日期與發佈的日期不同)時抵消它。注意我的機器時區在NPT中。你如何解決? – haedes