2013-02-26 79 views
1

所以這就是我想要做的。我有一個gsp視圖,其中包含以下示例值的表單:JodaTime堅持DateTime多列

params.startTime:01:00:00 AM,params.startDate:2013-01-01,params.timeZone:US/Central

下面是從我的領域類

class MyClass { 
    DateTime startDate 
    } 
    static mapping { 
    startDate type: PersistentDateTimeWithZone, { 
     column name: "start_date_time" 
     column name: "start_date_zone" 
    } 

一些代碼,這裏是從我的控制器一些代碼

//This is a service i created to return the UTC id of a long time zone 
    def tzs = new TimeZoneService() 
    params.timeZone = tzs.getTimeZoneId(params.timeZone)  
    def startTimeZone = DateTimeZone.forID(params.timeZone) 

    def startDate = new DateTime(params.startDate + "T" + params.startTime, startTimeZone) 

這就是這個樣子在我的數據庫:

start_date_time: 2013-01-01 01:00:00 
    start_date_zone: -06:00 

所以問題就出在這裏。當我使用以下模式格式化startTime時

DateTimeFormatter fmt = DateTimeFormat.forPattern("MMM dd, yyyy h:mm a z"); 

我的時區出現在-06:00而不是US/Central。這裏是我的問題:我嘗試了不同的方法來保存我的DateTime。如果我想只使用一列來保存日期時間和區域,我該怎麼做?如果我的date-time-zone屬性作爲單獨的參數出現,那麼用這三個參數構建DateTime的正確方法是什麼?請幫忙!提前致謝。

回答

0

爲了解決此錯誤,您需要獲取時區偏移的UTC值。我相信它通過Joda DateTimeZone爲您提供的輸出是美國/芝加哥,美國/東部,美國/太平洋等,但是,如果您想擁有諸如US/Central之類的自定義值,則必須創建一個映射您想要匹配這些偏移量的任何值。

希望這會有所幫助!