Groovy:试图解析一个日期

时间:2017-08-16 09:42:41

标签: java groovy

我正在尝试使用groovy解析日期字符串但遇到问题。这是字符串的样子和不起作用的逻辑。

def dateString = "2017-01-01T12:00:00Z"
def date = Date.parse("yyyy-MM-dd HH:mm:ss", dateString)

我也试过

def date = Date.parse("yyyy-MM-dd'T'HH:mm:ssZ", dateString)

也不解析。任何帮助都将非常感激。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

请尝试以下格式:yyyy-MM-dd'T'HH:mm:ssX

运行脚本:

def dateString = "2017-01-01T12:00:00Z"
def date = Date.parse("yyyy-MM-dd'T'HH:mm:ssX", dateString)
println date

产生以下输出:

Sun Jan 01 13:00:00 CET 2017

yyyy-MM-dd'T'HH:mm:ss'Z'yyyy-MM-dd'T'HH:mm:ssX

进行比较

您需要考虑在解析日期支持时区偏移。检查以下脚本运行,当前时区设置为Europe / Warsaw:

println Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", dateString)
println Date.parse("yyyy-MM-dd'T'HH:mm:ssX", dateString)

它会产生两种不同的结果:

Sun Jan 01 12:00:00 CET 2017
Sun Jan 01 13:00:00 CET 2017

第一个将Z视为文字,并使用当前时区解析给定的日期和时间。这意味着当您使用不同的当前时区设置运行此脚本时,您将在此时区再次获得12:00:00

第二个考虑时区信息,并将Z视为文字,而不是GMT/UTC时区符号。因此,如果我的时区正确时间是13:00:00而不是12:00:00

第一种格式还有另一个问题。如果您开始接收2017-01-01T12:00:00+0400之类的日期,则在使用第一个模式时会出现以下异常:

Caught: java.text.ParseException: Unparseable date: "2017-01-01T12:00:00+0400"
java.text.ParseException: Unparseable date: "2017-01-01T12:00:00+0400"
    at avg.run(avg.groovy:35)

第二个解析给定dateString显式时区偏移没有问题并打印:

Sun Jan 01 09:00:00 CET 2017

这是我当前时区的正确日期和时间。

我希望它有所帮助。