2013-02-26 48 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之类的自定义值,则必须创建一个映射您想要匹配这些偏移量的任何值。

希望这会有所帮助!