如何将groovy中“ yyyy-MM-dd HH:mm:ss.SSS”格式的给定日期更改为“ yyyy-MM-dd'T'HH:mm:ss.SSS'Z”格式

时间:2019-03-20 18:05:53

标签: groovy ready-api

如何以groovy将yyyy-MM-dd HH:mm:ss.SSS格式的给定日期转换为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'格式 例如,给定的日期为2019-03-18 16:20:05.6401383。我希望将其转换为2019-03-18T16:20:05.6401383Z

这是使用的代码:

 def date = format1.parse("2019-03-18 16:20:05.6401383");
 String settledAt = format2.format(date)
 log.info ">>> "+*date*+"   "+*settledAt*

结果以某种方式更改了日期:Mon Mar 18 18:06:46 EDT 20192019-03-18T18:06:46.383Z

提前感谢所有答案。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8+和Groovy 2.5+,我将使用新的Date / Time API:

import java.time.*

def date = LocalDateTime.parse('2019-03-18 16:20:05.6401383', 'yyyy-MM-dd HH:mm:ss.nnnnnnn')
String settledAt = date.format(/yyyy-MM-dd'T'HH:mm:ss.nnnnnnn'Z'/)

这是假设输入日期的时区为“ Zulu”。

答案 1 :(得分:0)

这是Java的功能

def date = Date.parse("yyyy-MM-dd HH:mm:ss.SSS","2019-03-18 16:20:05.6401383")

返回

Mon Mar 18 18:06:46 EET 2019

java仅处理毫秒数SSS(秒后3位数字)的问题

但是您要提供7位数的数字6401383

作为解决方法,请使用正则表达式删除多余的数字:

def sdate1 = "2019-03-18 16:20:05.6401383"
sdate1 = sdate1.replaceAll( /\d{3}(\d*)$/, '$1') //keep only 3 digits at the end
def date = Date.parse("yyyy-MM-dd HH:mm:ss.SSS",sdate1)
def sdate2 = date.format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")