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的方法来“投” StringDate ,我碰到这篇文章: 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'))​ 

希望这可以帮助。