2017-05-19 9 views
-2

私は日付を受け取り、これまでに丸一日追加する必要があり、次のJavaコードを持っている:日付にミリ秒を追加すると24時間かかりますか?

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
String dateString = "2017-01-30T19:00:00+0000" 
Date date = formatter.parse(dateString); 

long timeBetweenStartDates = 24 * 60 * 1000; 
Long DateWithOneDayAddedInMilis = date.getTime()+timeBetweenStartDates; 
Date dateWithOneDayAdded = new Date((DateWithOneDayAddedInMilis)); 

私はdateWithOneDayAddedのために取得しています値は次のとおりです。

Mon Jan 30 13:24:00 GMT 2017 

私が探していますどのようなここでは次のようになります。

Tue Jan 31 13:24:00 GMT 2017 

どのように私は日付が、私が期待した形式であることを確認することができますか?

+1

なぜ1日を追加すると思いますか?あなたは24分を追加しました。 1000ミリ秒= 1秒。 60 * 1000ミリ秒= 1分。 24 * 60 * 1000ミリ秒= 24分。 –

+0

long timeBetweenStartDates = 24 * 60 * 60 * 1000; – Adam

+0

「Tue Jan 31 13:00:00(あなたのタイムゾーンはここ)2017'」は24日ではなく「Tue Jan 31 13:24:00 GMT 2017」ではないと思ったと思います。 –

答えて

1

新しい日付と時刻のクラスがプログラマフレンドリーな場所の素晴らしい例です。これらを使うと、あなたが作ったもののようなエラーを作ることは不可能です(そして古いクラスでは簡単に作ることができます。特に、コードを書いてからは見つけにくいです)。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
    String dateString = "2017-01-30T19:00:00+0000"; 
    OffsetDateTime dateTime = OffsetDateTime.parse(dateString, formatter); 
    OffsetDateTime dateWithOneDayAdded = dateTime.plusDays(1); 
    System.out.println(dateWithOneDayAdded); 

これは、あなたが、もちろん計算された日時にあなたやあなたのユーザーが好む方法をフォーマットすること

2017-01-31T19:00Z 

を印刷します。

plusDays()は、夏時間(DST)とのトランシッションをうまく処理し、盲目的に24時間を追加するのではなく、翌日に同じ時刻にヒットします(可能な場合)。

+0

わかりませんが、私はこの特定のフォーマットをJava 9で読むと、フォーマッタを使わずに 'OffsetDateTime.parse(dateString)'だけを使うことができると思います。 –

関連する問題