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

问题描述 投票:1回答:3

我正在尝试将日期格式'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)
datetime groovy soapui datetime-format
3个回答
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


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)

0
投票

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

Date.parse("yyyy-MM-dd'T'HH:mm:ss",'2017-12-18T16:05:58bla-bla')
© www.soinside.com 2019 - 2024. All rights reserved.