Grails:如何在不制作自定义格式化程序的情况下解析date.toString()?

时间:2011-04-20 11:59:49

标签: date grails groovy

我有一个Grails应用程序,它需要解析使用date.toString()方法创建的字符串中的日期。

我的系统的默认date.toString()格式为"Thu Apr 20 00:27:00 CEST 2006"所以我知道我可以将Date转换为字符串,然后使用Date.parse('EEE MMM dd HH:mm:ss z yyyy', new Date().toString())将其转换为对象。

但那太蹩脚了!我不应该对系统的默认日期格式进行反向工程。另外,我不确定在什么情况下默认日期格式可以更改,从而破坏了该代码。

有没有办法将date.toString()解析回Date而不使用像这样的手动格式化程序?

谢谢!

更新:我已提交this Jira ticket以获得添加Groovy的功能。有人在票证上评论说Java的date.toString()方法被硬编码为使用EEE MMM dd HH:mm:ss z yyyy。这让Java变得如此不灵活,但这让我更容易接受格式化程序的硬编码!

3 个答案:

答案 0 :(得分:3)

page over here显示这在Java中有多糟糕(因此在Groovy中)

我同意Groovy中应该有一个使用此默认Date.parse格式的Date.toString()方法。

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

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

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

然后你可以这样做:

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

你的grails应用程序的groovy部分中的任何地方

答案 1 :(得分:0)

我没有使用过Grails,我知道这不是你问题的答案,但作为一种解决方法,你不能只将format-string保存为全局变量吗?

答案 2 :(得分:0)

如果您使用它转换为json,下面的代码可能会有所帮助:

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