2017-12-18 12 views
1

"2017-12-18T20:41:06.136Z"を "2017-12-18"に解析しようとしています。 T'00:00:00"日付を "yyyy-MM-dd'T'00:00:00"に変換する(Groovyを使用)

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) 

あなたがすぐに試すことができ、同じJava 8でのGroovyを実行demo

+0

完璧です。ありがとう:) – rAJ

+1

FYI:このコードは、現代のjava.timeクラスによって完全に置き換えられている、厄介な古い日時クラスを使用しています。 [the answer by 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'を使います。 –

関連する問題