2017-10-17 15 views
1

私はJava 8を使用しています。私のWebサービスの1つでは、次のような日付形式が得られています:2017-10-17T04:11:51+00:00日付とタイムスタンプをチェックする方法は20分前です

タイムスタンプが20分前であるかどうかテストしたいと思います。これはコードの下に書かれていますが、動作しません。

Long minutesAgo = new Long(20); 
String lastDate = "2017-10-17T04:11:51+00:00"; 
OffsetDateTime odt = OffsetDateTime.parse(lastDate); 
Instant instant = odt.toInstant(); // Instant is always in UTC. 
java.util.Date date = java.util.Date.from(instant); 
Date dateIn_X_MinAgo = new Date (date.getTime() - minutesAgo*60*1000); 
System.out.println(dateIn_X_MinAgo.getTime()); //It prints 1508212311000 

誰かが私のコードを見てもらえますか?

+3

[オラクル・トレイル](https://docs.oracle.com/を参照してください。 javase/tutorial/datetime/index.html)をjava.datetimeパッケージに追加します。 Java 8を使用している場合は、古い 'java.util.Date'を使用しないでください。 –

+1

Dateではなく、' LocalDateTime'または 'DateTime'を使用しようとします。 Javaでは 'Date'を持つものは全て下位互換性がなければならないので壊れています。 – LenglBoy

+1

'Date'は** legacy now **ですので、もう使用しないでください。代わりに 'java.time'パッケージの新しいものを使用してください。 – Zabuza

答えて

4

新しいjava.time API(OffsetDateTimeInstant)を使用しているため、古いjava.util.Dateクラスと混用する必要はありません。

あなたは現在の瞬間を取得するために2分で瞬間、とInstant.now()間の差を取得するためにjava.time.temporal.ChronoUnitを使用することができます。

String lastDate = "2017-10-17T04:11:51+00:00"; 
OffsetDateTime odt = OffsetDateTime.parse(lastDate); 
// get difference from now (in minutes) 
long diff = ChronoUnit.MINUTES.between(odt.toInstant(), Instant.now()); 
if (diff > 20) { 
    // odt is more than 20 minutes ago 
} 
+0

あなたの返信ありがとうございます。私は愚かな疑いを持っている、私はInstant.now()のUTCの日付を返すコードを見た。だからあなたが共有しているコードは適切な違いを正しく返しますか? OffsetDateTime.parseはISO_OFFSET_DATE_TIME形式の日付を返すので、 – VelNaga

+2

@VelNaga 'odt.toInstant()'は 'Instant'に変換されるので、最後に2つのインスタントを比較しています。日付はフォーマットを持たず、値を保持するだけです。解析後、「OffsetDateTime」は値を保持しますが、それを作成するために使用されたフォーマットは何か分かりません - インスタントの違いを得るためにフォーマットは無関係です –

+0

@VelNagaはい、日付を作成するために使用された形式にかかわらず、コードは適切な違いを返します。 –

関連する問題