147

私は、世界中の国で使用される Web ベースのシステムを作成しています。格納する必要があるデータの 1 つのタイプは、日付と時刻です。

Joda timeなどのサードパーティのライブラリと比較して、Java の日付と時刻のクラスを使用することの長所と短所は何ですか? これらのサードパーティのライブラリが存在するのには正当な理由があると思いますが、実際に比較したことはありません。

4

5 に答える 5

197

編集:Java 8がリリースされたので、それを使用できる場合は使用してください! java.time私の見解では、Joda Time よりもさらにクリーンです。ただし、Java 8 より前で行き詰まっている場合は、読み進めてください...

Max は、Joda を使用することの長所と短所を尋ねました...

長所:

  • それは非常にうまく機能します。Joda のバグは、標準の Java ライブラリよりもはるかに少ないと強く思います。Java ライブラリのバグのいくつかは、設計上、修正するのが (不可能ではないにしても) 非常に困難です。
  • 日付/時刻の処理について正しい方法で考えるように設計されています。つまり、「現地時間」の概念 (たとえば、「どこにいても午前 7 時に起こしてください」) と時間の概念 (「James に電話しています」) を分離するように設計されています。太平洋標準時の午後 3 時。彼がいる場所は午後 3 時ではないかもしれませんが、同じ瞬間です」)
  • 比較的頻繁に変更されるタイムゾーンデータベースの更新簡単になると思います
  • IMEには不変性の優れたストーリーがあり、 IME の作業がずっと楽になります。
  • 不変であることから、すべてのフォーマッターはスレッドセーフです。ほとんどの場合、アプリケーションを通じて単一のフォーマッターを再利用したいので、これは素晴らしいことです
  • java.timeJava 8 は多少似ているため、Java 8 での学習に有利なスタートを切ることができます。

短所:

  • 学ぶべき別の API です (ただし、ドキュメントはかなり優れています)。
  • ビルドしてデプロイする別のライブラリです
  • Java 8 を使用する場合、スキルを移行するための作業がまだいくつかあります
  • 私はDateTimeZoneBuilder過去に を効果的に使用できませんでした。ただし、これは非常にまれな使用例です。

独自の小さな API を効果的に構築するという oxbow_lakes のアイデアに対応するために、これが悪いアイデアである理由についての私の見解を以下に示します。

  • 仕事です。すでに完了しているのに、なぜ機能するのでしょうか。
  • あなたのチームの新参者は、自社開発の API よりも Joda に精通している可能性が高くなります。
  • 最も単純な用途を超えたものについては、間違いを犯す可能性があります...そして、最初は単純な機能だけが必要だと思っていても、これらの機能は少しずつ複雑になる傾向があります。日付と時刻の操作を適切に行うのは困難です。さらに、組み込みの Java API を適切に使用するのは困難です。カレンダー API の日付/時刻演算の仕組みに関する規則を調べてください。これらの上に何かを構築することは、最初から適切に設計されたライブラリを使用するのではなく、悪い考えです。
于 2009-02-26T10:16:57.450 に答える
24

日付と時刻を操作するためのより優れた APIが実装されることを期待して、Java 8 を待つつもりでない限り、はい、Joda-Timeを使用してください。時間の節約になり、多くの頭痛の種を回避できます。

于 2009-02-26T09:54:57.580 に答える
15

答えは次のとおりです

JODA (および JSR-310) は、複数のカレンダー システムでの使用をサポートする、完全に機能する日付/時刻ライブラリです。

個人的には、JODA は私が必要としている複雑さの点で一歩遠すぎると感じました。Date標準のJavaとCalendarクラスの2つの主要な(IMHO)間違いは次のとおりです。

  1. それらは可変です
  2. それらは、インスタントインタイムから年月日の概念を混同します

これらは JODA によって対処されますが、実際の「暦」計算のために内部で Java クラスを使用するYearMonthDayとの独自のクラスを作成するのは非常に簡単です。Instantそうすれば、100 を超えるクラスの API や、別のフォーマット/解析メカニズムなどに慣れる必要はありません。

もちろん、さまざまな年表 (ヘブライ語など) の完全な表現が必要な場合や、独自の架空の暦体系 (たとえば、作成中のゲーム用) を定義できるようにしたい場合は、おそらく JODA または JRS-310 が最適です。そうでない場合は、自分でロールすることをお勧めします。

JSR-310 仕様のリーダーは、最初に JODA を書いた Stephen Colebourne であるため、論理的には JODAに取って代わることになります。

于 2009-02-26T10:03:47.623 に答える
7

それはすべてあなたが日付で何をしているかに依存します。単にそれらを永続化する場合、Javaに組み込まれているDatesは、おそらく必要なすべてを実行します。ただし、広範囲にわたる日付の操作を行っている場合は、おそらくJodaを使用したほうがよいでしょう。

于 2009-02-26T11:31:05.073 に答える
7

次の理由により、Joda-Time ライブラリを使用する必要があります。

  1. Joda-Time は、 日付表現の標準的な方法であるISO 8601 標準をサポートしています。
  2. 日/月/年の足し算と引き算は、Joda-Time の方が java.util.date よりも簡単です。
  3. 特定の日付による初期化は、Joda-Time では非常に簡単です。
  4. Joda-Time はタイムゾーンもサポートしています。
  5. Joda-Time には、より優れた組み込みの解析機能があります。「2014-02-31」のような間違った日付がエラーとしてスローされます。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/

于 2014-06-10T11:13:51.510 に答える