开发者

Grails: how to parse date.toString() without making a custom formatter?

开发者 https://www.devze.com 2023-02-28 02:59 出处:网络
I have a Grails application that needs to parse Dates out of strings that were created with the date.toString() method.

I have a Grails application that needs to parse Dates out of strings that were created with the date.toString() method.

My system's default date.toString() format is "Thu Apr 20 00:27:00 CEST 2006" so I know I can turn a Date into a string and then back into an object using Date.parse('EEE MMM dd HH:mm:ss z yyyy', new Date().toString()).

But that's lame!开发者_运维技巧 I shouldn't have to reverse engineer the system's default date format. Plus, I'm not sure under what circumstances the default date format can change, thus breaking that code.

Is there a way to parse a date.toString() back into a Date without using a hand-rolled formatter like that?

Thanks!

Update: I filed this Jira ticket to get such a feature added Groovy. Someone commented on the ticket that Java's date.toString() method is hard-coded to use EEE MMM dd HH:mm:ss z yyyy. That sucks for Java to be so inflexible, but it makes it easier for me to live with hard-coding the formatter!


There's a page over here showing how bad this is in Java (and hence in Groovy)

I agree that there should be a Date.parse method in Groovy which uses this default Date.toString() format.

Maybe it's worth adding a request for improvement over on the Groovy JIRA?

As a temporary workaround, you could add your parse method to the String metaClass in Bootstrap.groovy?

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

Then you can do:

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

anywhere in the groovy portions of your grails app


I haven't worked with Grails and I know this is not the answer to your question, but as a workaround, couldn't you just save the format-string as a global variable?


if u use it to convert to json, maybe code below could help:

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

精彩评论

暂无评论...
验证码 换一张
取 消