2017-12-18 9 views
1

"2017-12-18T20 : 41 : 06.136Z"을 "2017-12-18"로 구문 분석하려고합니다. T'00 : 00 : 00 "Groovy를 사용하여 "yyyy-MM-dd'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 : 파싱 할 날짜 :"2017-12-18T20 : 46 : 06 : 라인에서 234Z "오류 : 16

이 줄에는 오류가 있습니다.

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

Java 8에서 실행 하시겠습니까? –

+0

@tim_yates 예 ... 이것은 java 버전과 관련이 있습니까? – rAJ

+0

@rAJ, 아래 해결책이 문제를 해결하는 데 도움이되는지 확인하십시오. – Rao

답변

2

:

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) 

당신은 신속하게 시도 할 수 있습니다 같은 자바 8 그루비를 실행 demo

+0

완벽합니다. 감사합니다 :) – rAJ

+1

FYI :이 코드는 현재 레거시이며, 현대 java.time 클래스로 완전히 대체 된 귀찮은 이전 날짜 시간 클래스를 사용합니다. [답변을 tim_yates하여] (https://stackoverflow.com/a/47923883/642706)를 참조하십시오. –

0

당신이 날짜의 일부만을 분석해야하는 경우, 다음 구문을 사용합니다

Date.parse(..) 이하 사용, 언급 된 오류를 방지하기 위해
Date.parse("yyyy-MM-dd'T'HH:mm:ss",'2017-12-18T16:05:58bla-bla') 
2

당신은 다만 수 있습니다 ... 당신이 더 나은 날짜/시간 클래스에 액세스 할 수 있습니다 온라인 :

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

UTC 값으로 ['OffsetDateTime'] (https://docs.oracle.com/javase/9/docs/api/java/time/OffsetDateTime.html) 클래스를 사용하는 것이 더 좋습니다. 'Europe/Paris' 나'Africa/Casablanca'와 같은 풀 타임 존을 가지고있을 때'ZonedDateTime'을 사용하십시오. –

관련 문제