2016-02-09 8 views
7

日のクラスのセット全体がJava 8であり:Java 8で使用する日付クラスはどれですか?

  • java.time.LocalDateTime
  • java.time.ZonedDateTime;
  • java.time.Instant;
  • java.time.OffsetDateTime;
  • java.sql.Timestamp;
  • java.util.Date

私はすでにJavaDocsを渡しており、これらすべてのクラスに必要なすべてのメソッドが含まれていることに注意しました。したがって、当面はランダムに選択することができます。しかし、私は6つの別々のクラスがあり、それぞれが特定の目的に専念している理由があると思います。

技術情報&要件:

  1. 入力は、これらの日付形式のいずれかに変換される、Stringです。
  2. タイムゾーンを表示する必要はありませんが、2つの日付を比較するときは、ニューヨークとパリの時刻を正確に比較できることが重要です。
  3. 正確なレベルは秒です。ミリ秒を使用する必要はありません。
  4. 必要な操作:
    • find max/min date;
    • 日付でオブジェクトを並べ替える。
    • 計算日&期間(2つの日付の差);
    • オブジェクトをMongoDBに挿入し、日付(たとえば、特定の日付以降のすべてのオブジェクト)からデータベースから取得します。

私の質問:私は、ビューのパフォーマンス&保守ポイントからこれらの4つのオプションの中で最適なフォーマットを選択するために心に留めなければならない側面

  1. これらの日付クラスのいくつかを避けなければならない理由はありますか?
+3

は、最大と最小の日付は、あなたのようなものでJava 8つのラムダを使用することができます取得します。それらのクラスのJavadocを読むことから始めてください。これには良い答えはありません。 – Tunaki

+1

Java 8でjava.util.Dateを使用しないでください。 – keuleJ

+0

「日付を保存する」を最初に定義します。あなたは 'java.sql.Timestamp'と言いますが、これはRDBMSエンジンに格納する/取り出すつもりなのでしょうか?タイムゾーン情報が必要ですか? – fge

答えて

6

Dateクラスのそれぞれが特定の目的のために、次のとおりです。

  • あなたがjava.sql.Timestampを使用し、SQL/JDBC文脈であなたの日付を使用する場合。

  • java.util.Dateは旧式のJava APIであり、スレッドセーフではありません。タイムゾーニングを処理することは難しく、すべての最上部にあります。1つの単純な一貫性は、 0。

  • は、日付 - 時刻を表す不変の日付 - 時刻オブジェクトで、しばしば年 - 月 - 日 - 時 - 分 - 秒と見なされます。

  • java.time.ZonedDateTimeクラスの店のすべての日付と時刻のフィールド、次のような値に対処するためにそれを使用できるように:ヨーロッパ/パリのタイムゾーンで 27th January 1990 at 15:40.30.123123123 +02:00

あなたのタスクを実行するには、ZonedDateTimeクラスはInstantの瞬間タイムライン(タイムライン上でモデルの単一瞬時ポイント)までLocalDateTimeのローカルタイムラインからの変換を処理します。 ZoneOffsetで表される2つのタイムラインの違いは、UTC /グリニッジからのオフセットです。

時間と期間を計算するには、時間ベースの時間量'20 .5秒 'とjava.time.Periodがあります。これは日付ベースの時間です(例:26歳、2月および2日)。私はこれが広すぎる怖い

Date maxDate = list.stream().map(yourInstance -> yourInstance.date).max(Date::compareTo).get(); 
Date minDate = list.stream().map(yourInstance -> yourInstance.date).min(Date::compareTo).get(); 
関連する問題