使用 Groovy 将日期解析为 "yyyy-MM-dd'T'00:00:00"

Parse date to "yyyy-MM-dd'T'00:00:00" using Groovy

我正在尝试将日期格式“2017-12-18T20:41:06.136Z”解析为“2017-12-18'T'00:00:00”

Date date = new Date();
def dateformat =  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
dateformat.setTimeZone(TimeZone.getTimeZone(TimeZoneCode));
def currentDate = dateformat.format(date)
log.info "Current Date : " + currentDate
date1 =  new SimpleDateFormat("yyyy-MM-dd'T'00:00:00").parse(currentDate)
log.info "Current Date : " + date1

显示错误:

java.text.ParseException: Unparseable date: "2017-12-18T20:46:06:234Z" error at line: 16

这一行给出错误:

date1 =  new SimpleDateFormat("yyyy-MM-dd'T'00:00:00").parse(currentDate)

如果您只需要解析部分日期,请使用以下语法:

Date.parse("yyyy-MM-dd'T'HH:mm:ss",'2017-12-18T16:05:58bla-bla')

为了避免上述错误,请使用以下语句 Date.parse(..):

def dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
def dateString = "2017-12-18T20:41:06.136Z"
def date = Date.parse(dateFormat, dateString)

您应该能够使用下面的脚本实现您想要实现的目标。

//Change timezone if needed 
def tz = 'IST'  
TimeZone.setDefault(TimeZone.getTimeZone(tz))

def dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
def dateString = "2017-12-18T20:41:06.136Z"

Calendar calendar = Calendar.getInstance()
calendar.with {
  time = Date.parse(dateFormat,dateString)
  set(Calendar.HOUR_OF_DAY, 0)
  set(Calendar.MINUTE, 0)
  set(Calendar.SECOND, 0)     
  set(Calendar.MILLISECOND, 0)
}
log.info calendar.time.format(dateFormat)

您可以在线快速尝试相同的方法demo

运行 Groovy on Java 8 让你获得更好的 Date/Time 类...你可以这样做:

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit

String result = ZonedDateTime.parse("2017-12-18T20:41:06.136Z")
    .truncatedTo(ChronoUnit.DAYS)
    .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)