我正在尝试使用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)
也不解析。任何帮助都将非常感激。
提前感谢您的帮助。
答案 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
这是我当前时区的正确日期和时间。
我希望它有所帮助。