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

时间:2017-12-18 15:18:18

标签: datetime groovy soapui datetime-format

我正在尝试将日期格式'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”错误:16

此行显示错误:

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

3 个答案:

答案 0 :(得分:2)

为避免上述错误,请使用以下语句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

答案 1 :(得分:2)

在Java 8上运行Groovy,您可以访问更好的日期/时间类...您可以这样做:

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)

答案 2 :(得分:0)

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

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