Groovystring到date
我正在用Groovy编码
我目前正在尝试转换一个string,我有一个约会,而不必做任何太乏味的事情。
String theDate = "28/09/2010 16:02:43"; def newdate = new Date().parse("d/M/yyyy H:m:s", theDate)
输出:
Tue Aug 10 16:02:43 PST 2010
上面的代码工作得很好,但是当我的string变成如下所示:
String testDate = "Tue Aug 10 16:02:43 PST 2010" def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)
它告诉我“Tue没有这样的价值”。 我试图在dateparsing中抛出一个“E”,但它表示date不能被parsing。
有人可以解释我应该如何parsing第二个例子吗?
parse()的第一个参数是预期的格式。 您必须将其更改为Date.parse("E MMM dd H:m:sz yyyy", testDate)
才能正常工作。 (注意你不需要创build一个新的Date对象,这是一个静态方法)
如果你事先不知道什么格式,你必须find一个特殊的parsing库。 在Ruby中有一个名为Chronic的库,但是我不知道Groovy等价物。 编辑 :有一个名为jChronic库的Java端口,你可能想检查出来。
JChronic是你最好的select。 下面是一个将.fromString()
方法添加到Date类的例子,该类可以parsing任何可以抛出的东西:
Date.metaClass.'static'.fromString = { str -> com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time }
你可以这样调用它:
println Date.fromString("Tue Aug 10 16:02:43 PST 2010") println Date.fromString("july 1, 2012") println Date.fromString("next tuesday")
尝试这个:
def date = Date.parse("E MMM dd H:m:sz yyyy", dateStr)
这里是格式化date的模式
Date#parse
已被弃用。 替代scheme是:
java.text.DateFormat#parse
thereFore:
new SimpleDateFormat("E MMM dd H:m:sz yyyy", Locale.ARABIC).parse(testDate)
请注意,SimpleDateFormat是DateFormat的一个实现
searchGroovy的方法来“投” String
到Date
,我碰到这篇文章: http : //www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/
作者使用Groovy metaMethods来dynamic扩展任何类的asType
方法的行为。 他们提供了一个Convert
类,它包装了Groovy的复杂性,使得从任何types向其他types添加自定义的基于types的types转换变得微不足道:
Convert.from( String ).to( Date ).using { new java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) } def christmas = '12-25-2010' as Date
这是一个方便而强大的解决scheme,但是我不会把它推荐给那些不熟悉元类的折衷和陷阱的人。
我认为在这种情况下最简单的方法是使用parseToStringDate ,它是Groovy JDK增强的一个:
parsing一个匹配模式EEE MMM dd HH:mm:ss zzz yyyy的string,仅包含US-locale常量(例如星期六的星期六)。 这样的string是由Date的toString方法生成的
例:
println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))
希望这可以帮助。