2011-04-20 55 views
2

我有一个Grails应用程序,它需要使用date.toString()方法创建的字符串解析日期。Grails:如何解析date.toString()而不制作自定义格式器?

我的系统的默认date.toString()格式是"Thu Apr 20 00:27:00 CEST 2006",所以我知道我可以将一个日期变成一个字符串,然后回到使用Date.parse('EEE MMM dd HH:mm:ss z yyyy', new Date().toString())的对象。

但这是跛脚!我不应该反向设计系统的默认日期格式。另外,我不确定默认日期格式在什么情况下可以更改,从而打破了该代码。

有没有办法解析一个date.toString()回到一个日期,而不使用像这样的手动格式化?

谢谢!

更新:我提交this Jira ticket以获得Groovy这样的功能。有人评论说,Java的date.toString()方法被硬编码为使用EEE MMM dd HH:mm:ss z yyyy。这让Java非常不灵活,但它让我更容易对格式化程序进行硬编码!

回答

3

有一个page over here显示如何糟糕,这是在Java中(因此在Groovy)

我同意,应该在Groovy一个Date.parse方法,使用这种默认Date.toString()格式。

也许值得在上添加改进请求吗?

作为临时解决方法,您可以将解析方法添加到String metaClassBootstrap.groovy

String.metaClass.parseToStringDate = { Date.parse('EEE MMM dd HH:mm:ss z yyyy', delegate) } 

然后,你可以这样做:

new Date().toString().parseToStringDate() 

在你的Grails应用程序的常规部分的任何地方

+0

谢谢你的建议!我可能会添加一个方法到Date而不是String,因为它是date.toString()的伴侣如果没有人在明天提供完整的解决方案,我会将其标记为已接受。 – 2011-04-20 15:03:40

+0

PS - 我提交了JIRA票:http://jira.codehaus.org/browse/GROOVY-4789 – 2011-04-20 15:42:22

+0

哇!我不能相信Date.toString()尚未转换为使用DateFormat输出!我假设它正在使用类似DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).toPattern(),但我猜不是...... :( – 2011-04-20 16:17:56

0

我还没有与Grails合作,我知道这不是你的问题的答案,但作为一种解决方法,你不能只是将格式字符串保存为全局变量吗?

0

如果u用它来转换成JSON,下面也许代码可以帮助:

//bootstrap 
JSON.registerObjectMarshaller(Date) { 
    return it?.format("yyyy-MM-dd HH:mm:ss") 
}