2011-04-20 61 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") 
}