1. ホーム

[解決済み】Javaで時間のないDateを取得する方法は?

2022-04-05 09:07:14

質問

Stack Overflowの質問から続く タイムスタンプなしで現在の日付を取得するJavaプログラム :

Dateオブジェクトを時間なしで取得する最も効率的な方法は何ですか?この2つの方法以外に方法はないのでしょうか?

// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));

// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();

更新情報 :

  1. について知っていました。 ジョダイム このような単純な(と思う)タスクのために追加のライブラリを避けようとしているだけです。しかし、これまでの回答から、Joda-Timeは非常に人気があるようですので、私はそれを考慮するかもしれません。

  2. 効率的 つまり、一時的なオブジェクトは避けたいのです。 String で使用されるような method 1 一方 method 2 は、解決策ではなく、ハックのような気がします。

解決方法は?

あなたは、絶対に ある を使用します。 java.util.Date ? 私なら 徹底的に を使用することをお勧めします。 Jodaタイム または java.time パッケージの代わりに、Java 8から導入されました。特に、日付とカレンダーは 常に は特定の瞬間を表し、「単なる日付」という概念はありませんが、Joda 時間 する はこれを表す型を持っています ( LocalDate ). 実際にやろうとしていることを表す型を使うことができれば、コードはより明確になります。

Joda Timeを使う理由は他にもたくさんあります。 java.time の代わりに、組み込みの java.util 一般に、これらの型の方がはるかに優れたAPIです。これらの型は一般にはるかに優れた API です。 java.util.Date データベースとのやりとりのためなど、必要であれば自分のコードの境界線上で