私は、世界中の国々で使用されるWebベースのシステムを作成しています。保存する必要があるデータの1つのタイプは、日付と時刻です。
Joda time などのサードパーティライブラリと比較したJava dateおよびtimeクラスを使用することの長所と短所は何ですか? ?これらのサードパーティのライブラリは正当な理由で存在していると思いますが、実際に比較したことはありません。
編集:Java 8がリリースされました。使用できる場合は、そうしてください!Java.time
私の見解では、Joda Timeよりもさらにクリーンです。ただし、Java 8より前のバージョンにこだわっている場合は、続きを読んでください...
マックスは、ジョーダを使用することの長所と短所を求めました...
長所:
Java.time
in Java 8、少なくとも多少似ているため)短所:
DateTimeZoneBuilder
を効果的に使用することに失敗しました。ただし、これはveryまれなユースケースです。独自の小さなAPIを効果的に構築するというoxbow_lakesのアイデアに対応するため、これが悪いアイデアである理由についての私の見解を以下に示します。
答えは:依存する
JODA(およびJSR-310)は、複数のカレンダーシステムでの使用のサポートを含む、完全に機能する日付/時刻ライブラリです。
個人的には、JODAは、私が必要とするものの複雑さの観点から、あまりにも大きな一歩であると感じました。標準のJava Date
およびCalendar
クラスの2つのプリンシパル(IMHO)の間違いは次のとおりです。
これらはJODAによって対処されていますが、YearMonthDay
およびInstant
の独自のクラスをロールすることは非常に簡単です。両方ともJavaクラスを使用します実際の「カレンダー」計算のフード。100を超えるクラスのAPI、異なるフォーマット/解析メカニズムなどに精通する必要はありません。
もちろん、異なる年表(ヘブライ語など)の完全な表現が必要な場合、または独自の架空のカレンダーシステムを定義したい場合(たとえば、作成中のゲームの場合)、おそらくJODAまたはJRS-310が最適です。そうでない場合は、自分で転がすことをお勧めします。
JSR-310の仕様リードは、JODAを最初に書いたStephen Colebourneであるため、論理的にはreplace JODAになります。
次の理由から、Joda-Timeライブラリを使用する必要があります。
Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].
詳細については、このページをご覧ください: http://swcodes.blogspot.com/
それはすべて、あなたが日付で何をしているかに依存します。単純に永続化する場合は、Javaに組み込まれているDatesがおそらくあなたが望むすべてのことを行うでしょう。ただし、広範囲の日時操作を行う場合は、おそらくJodaを使用したほうがよいでしょう。