web-dev-qa-db-ja.com

ジョーダ時間vs Java時間

Jodaは機能が豊富で、標準よりも洗練されていますJava時間ですが、それが常に最良の使用であるとは限りません。JodaTimeまたはJava任意の時間Javaコード?

要件に応じて適切なものを選択する方法を説明するガイドラインはありますか?

19
Jedi Knight

Joda Timeは、Java時間ライブラリーを大幅に改善したものであり、以下の例外を除いて、ほとんど常に正しい選択です。

  1. プロジェクトにサードパーティの依存関係を追加することが困難または望ましくない場合

  2. パブリックインターフェイスで使用すると問題が発生する場合。 ORMを取得してJavaとJoda時間フィールドの両方を処理する

ただし、2)の場合は、可能であればJodaを内部で使用することをお勧めします。

上記のことを覚えておくことは価値がありますが、まれであるべきです。疑問がある場合は、Jodaを使用してください。

29
Robert Johnson

Java標準の日付APIは根本的に壊れているので、Jodaのライブラリ拡張にJoda Timeを追加するだけで、Java APIの残りのクラスパスにデフォルトでロードされるようにすることをよく考えました。

国際化とタイムゾーンをレガシーJavaアプリケーションに後付けする必要があり、標準のJava APIのみを使用しようとしたことがあれば、私が理解していることでしょう。 数千のコード行を100行未満に変換することができました。生産性の向上は考えられません。

さらに、標準のDate APIは直感的ではなく、流動的なJoda APIは数週間ではなく数時間で取得できます。 2マイル離れた島に着こうとするあなたの例えは、次のようなものです。

1)わずか6分で島に行くモーターボート。

または...

2)ハリケーンの最中に、親友がバレーボールであるクレイジーな男が操縦している間に、その場しのぎのいかだをつるにつないだ。

他の回答が述べているように、HibernateにはJodaタイプのBeanプロパティをデータベースの日付/時刻フィールドにマッピングできるプラグインが含まれているため、ORMなどのいくつかの欠点が存在しなくなります。 JPAもこれに対する答えを持っているかもしれません。

ディスクスペースに関係するため、アプリケーションがデスクトップアプリケーションとして最小限のフットプリントを必要とする場合、おそらくJavaは適切な言語の選択ではありません。

12
maple_shaft

もう1つのポイント:Java-Time(つまりDate)はThreadSafeではありませんが、JodaTimeはそうですしたがって、

  • 共通リソースにアクセスするマルチスレッド環境
  • シチュエーションのような集中時刻同期

または、単純なアプリケーションの場合、Java-Timeで問題ありません。

8
vintesh

Java.timeフレームワークは、bothレガシー日時クラスとJoda-Timeの両方を置き換えます

更新:Javaの最も古いバージョンに同梱されている古い日時クラスはレガシーです Java.timeクラスに正式に取って代わられました 組み込みJava 8、Java 9以降。

DateCalendarSimpleDateFormat、およびJava.sql.*日時クラスはすべて避けるべきです。これらの紛らわしい、面倒な、不十分に設計されたクラスを使用する必要は決してありません。これらは完全にJava.timeクラスに置き換えられています。彼らの現在の唯一の目的は、既存の古いコードを維持することです。古いコードとインターフェースする場合、古いクラスに追加された新しいメソッドを呼び出すことにより、Java.timeとの間で変換できます。変換の詳細については、 Java.util.Dateを「Java.time」タイプに変換しますか? を参照してください。

Joda-Time プロジェクトは現在 maintenance mode であり、 Java.time クラスへの移行を推奨しています。 Joda-Timeプロジェクトは、Java.timeフレームワークに影響を与えました。どちらも同じ人物、 Stephen Colebourne が主導しています。 Java.timeはJoda-Timeの書き換え/再設計と考えることができます。すべて新しいコードですが、業界初の包括的で洗練された日時ライブラリの構築から何年にもわたって学んだことを使用しています。

詳細については、 Oracleチュートリアル を参照してください。スタックオーバーフローで多くの例と説明を検索してください。

Java.time機能の多くは、Java 6&7 in ThreeTen-Backport にバックポートされ、さらに Android に適応されます- ThreeTenABP使用方法… を参照)。

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。 IntervalYearWeekYearQuarter のようないくつかの便利なクラスがここにあります。 、および more

2
Basil Bourque