Javaで現在のシステム時間よりも4時間少ないDateオブジェクトを返すにはどうすればよいですか?最も簡単な方法の4時間前の日付を取得する
答えて
ワン:
Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));
これが考慮にDST (Daylight Saving Time)を取ることはありません。代替方法はCalendar
です:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
Date date = calendar.getTime();
これはかなり醜いAPIです。代替はJodaTimeです:
DateTime dateTime = new DateTime().minusHours(4);
Date date = dateTime.toDate(); // If you ever need this...
戻って日付に変換し、4時間でミリ秒数を引く、ミリ秒に変換します。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
calendar.getTime();
'Calendar.HOUR'は12時間(AM/PM)ベースであり、24時間ベースではありません。 'Calendar.HOUR_OF_DAY'が必要です。また、 'Calendar#getInstance()'ファクトリを使うことは、リージョン固有のカレンダを手動で構築するよりも優先されます。 – BalusC
@BalusC:修正されました。 –
使用Calendar
オブジェクトとadd
方法。
calendar.add(Calendar.HOUR, -4);
他の回答http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -4);
java.util.Date d = c.getTime();
System.out.println(d);
を参照してくださいが正しいですが、私は、近代的な答えに貢献したいと思います。現代のソリューションは、近代的なJavaの日時APIであるjava.time
を使用しています。
Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));
System.out.println(fourHoursAgo);
これだけ印刷:
2018-01-31T15:22:21.113710Z
最後にZ
は時間がUTCに印刷されていることを示している - あなたがする場合はUTCでゼロを相殺しました。 Instant
クラスは、Date
の現代的な代替品なので、それに固執することをおすすめします。現代のAPIは、一般的に非常にきれいで、非常によく設計されています。
ライブラリクラスに4時間の減算をさせることの利点に注意してください。コードは読みやすく、エラーが起こりにくいものです。面白い定数がなく、読者が正しいかどうかを確認する時間がありません。
あなたはこのように変換し、変更することはできませんか、変更したくないレガシーAPIを使用しているときには、例えば、昔ながらのDate
オブジェクトが必要です場合:
Date oldfashionedDate = Date.from(fourHoursAgo);
リンク:Oracle Tutorial trail: Date Time。もちろん、インターネットには他のリソースもありますので、検索してください。
次回は重複した回答を投稿するのではなく、dupeとしてクローズに投票してください。 – BalusC
ポイント@BalusCを参照してください。私はそれらが正確な重複を考慮したならば(私の2つの回答の間に実質的な重複がありますが、それらは同じではありません)。 –
- 1. 月の名前、日付、時間を取得するには?
- 2. 2つの日付間の最大日付/時刻を取得
- 3. 2つの日付の時間差(時間単位)を取得する方法
- 4. Mysqlはデータベースの日付から前の4月1日を取得します
- 5. 日付と時刻の間にレコードを取得するLINQクエリ
- 6. 日付フィールドの時間セグメントを取得する方法
- 7. 2つの日付時間セル間でデータを取得
- 8. 日付を取得する2週間前にバッチファイル
- 9. 2つの時間間隔の間にfriday日付を取得する方法
- 10. 2つの日付間の時間の取得。
- 11. 時間、日付、年をサーバー側で取得する方法
- 12. Octave:日付を取得する時間ピッカー
- 13. 2つの日付間でランダムな日付を取得する
- 14. mvc 4:時間のない日付のみを保存する
- 15. 2つの日付時間の差から別の時刻を取得する
- 16. 2つの日付間の時間差を取得しようとする
- 17. 等間隔の2つの日付間の日付を取得する
- 18. 日付のリストから時間の範囲を取得
- 19. 現在の時刻と日付を24時間タイムスケールで取得する
- 20. Pythonの現在の日付から7日前の日付を取得する
- 21. J2MEで前の日付を取得
- 22. C#MySQLテーブルから日付と時間のデータを取得
- 23. 前の勤務日の日付を取得するVBA
- 24. 今日の日付から前の月を取得する
- 25. SQL Statementで現在の日付+4時間を取得するにはどうすればよいですか?
- 26. PHP:昨日前の日付を取得するには?
- 27. 各日付よりn日前の値を取得する
- 28. 1日前の日付をextjsフィールドで取得する方法
- 29. Laravelの2つの日付間の予想時間を取得しますPHP
- 30. いくつかの日付間の日付のリストを取得
なぜDSTを考慮に入れないのですか? –
最初の方法では動作しますが、DST *タイムゾーン遷移*を考慮しないと言ってもいいと思います。 JodaTimeに言及すると+1します。 –
@Thor:実行中に、System#currentTimeMillis()に基づいて、過去4時間にDSTが有効/無効にされているかどうかわからないため、結果として生じる時間がオフになる危険があります。 – BalusC