我正在使用Groovy
进行编码我目前正在尝试将我拥有的字符串转换为日期,而不必做任何太繁琐的事情。
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 testDate = "Tue Aug 10 16:02:43 PST 2010"
def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)
它告诉我“周二没有这样的价值”。我试图在日期的解析中抛出一个“E”,但它说日期无法解析。
有人可以解释我应该如何解析第二个例子吗?
答案 0 :(得分:67)
parse()的第一个参数是预期的格式。您必须将其更改为Date.parse("E MMM dd H:m:s z yyyy", testDate)
才能生效。 (注意,您不需要创建新的Date对象,它是一个静态方法)
如果您事先不知道什么格式,则必须为此找到一个特殊的解析库。在Ruby中有一个名为Chronic的库,但我不知道Groovy的等价物。 编辑:库中有一个名为jChronic的Java端口,您可能需要查看它。
答案 1 :(得分:25)
答案 2 :(得分:24)
JChronic是您的最佳选择。这是一个向Date类添加.fromString()
方法的示例,该方法可以解析您可以抛出的任何内容:
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")
答案 3 :(得分:5)
使用Groovy的方法来搜索String
到Date
,我发现了这篇文章:
http://www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/
作者使用Groovy metaMethods来动态扩展任何类'asType
方法的行为。这是网站上的代码。
class Convert {
private from
private to
private Convert(clazz) { from = clazz }
static def from(clazz) {
new Convert(clazz)
}
def to(clazz) {
to = clazz
return this
}
def using(closure) {
def originalAsType = from.metaClass.getMetaMethod('asType', [] as Class[])
from.metaClass.asType = { Class clazz ->
if( clazz == to ) {
closure.setProperty('value', delegate)
closure(delegate)
} else {
originalAsType.doMethodInvoke(delegate, clazz)
}
}
}
}
它们提供了一个包含Groovy复杂性的Convert
类,使得从任何类型向任何其他类型添加基于自定义as
的类型转换变得微不足道:
Convert.from( String ).to( Date ).using { new java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) }
def christmas = '12-25-2010' as Date
这是一个方便而强大的解决方案,但我不建议那些不熟悉修改metaClasses的权衡和陷阱的人。
答案 4 :(得分:3)
Date#parse
已弃用。替代方案是:
java.text.DateFormat#parse
那里:
new SimpleDateFormat("E MMM dd H:m:s z yyyy", Locale.ARABIC).parse(testDate)
答案 5 :(得分:0)
我认为在这种情况下最简单的方法是使用parseToStringDate一个Groovy JDK增强功能:
解析匹配模式的字符串EEE MMM dd HH:mm:ss zzz yyyy 仅包含US-locale-constants(例如周六周六)。这样的 string由Date
的toString方法生成
示例:
println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))
希望这有帮助。
答案 6 :(得分:0)
下面是我们正在开发的应用程序中进行操作的方式。
import java.text.SimpleDateFormat
String newDateAdded = "2018-11-11T09:30:31"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
Date dateAdded = dateFormat.parse(newDateAdded)
println(dateAdded)
输出看起来像
Sun Nov 11 09:30:31 GMT 2018
在您的示例中,我们可以进行一些调整以满足您的需求。如果我是你,我会做:
String datePattern = "d/M/yyyy H:m:s"
String theDate = "28/09/2010 16:02:43"
SimpleDateFormat df = new SimpleDateFormat(datePattern)
println df.parse(theDate)
我希望这会对您有所帮助。