21

Java で日付やタイムスタンプを操作する必要があるたびに、何か間違ったことをしているような気がして、独自の Date and Time ユーティリティ クラスをコーディングせずに API を操作するためのより良い方法を見つけるために無限の時間を費やしています。 . ここに私が遭遇したいくつかの厄介なものがあります:

  • 0 ベースの月。8 の代わりに Calendar.SEPTEMBER を使用するのがベスト プラクティスであることは理解していますが、8 が 8 月ではなく 9 月を表しているのは面倒です。

  • タイムスタンプなしで日付を取得します。日付のタイムスタンプ部分をゼロにするユーティリティが常に必要です。

  • 過去に他にも問題があったことは知っていますが、思い出せません。回答に自由に追加してください。

それで、私の質問は...Javaの日付と時刻操作の使用を簡素化するために、どのサードパーティAPIを使用していますか? Jodaの使用について何か考えはありますか? JSR-310 Date and Time API を詳しく調べた人はいますか?

4

10 に答える 10

11

この投稿には、Java Date/Time API と JODA の比較に関する良い議論があります。

個人的には、Java で日付/時刻を操作する必要があるときはいつでも、グレゴリオ暦SimpleDateFormatを使用しています。Java API を使用する際に実際に問題が発生したことはなく、非常に使いやすいと感じているため、代替手段を実際に検討したことはありません。

于 2008-09-17T21:16:00.820 に答える
4

Apache Commons Lang プロジェクトには、DateUtils便利な Date 操作を実行するクラスがあります。

DateUtils.truncate()は多くのことを使用して、Date の一部を「ゼロ アウト」します (たとえば、Date オブジェクトで日付を表し、時間情報を含めないようにする場合に役立ちます)。各メソッドは、DateCalendarオブジェクトの両方に対しても機能します。

http://commons.apache.org/lang/

于 2008-09-17T21:58:31.747 に答える
3

私はJodaを3年間独占的に使用しており、間違いなくそれをお勧めします-それは「それが言うことをする」インターフェースで覆われたエリア全体を持っています。

Jodaは、開始時に複雑に見える場合があります。たとえば、期間、期間、間隔の概念は似ているように見えますが、コードでorg.joda.time.DateTime(またはorg.joda.time.DateMidnight)を置き換えjava.util.Dateて、それらの多くの便利なメソッドを使用するだけで開始できます。クラスには、他の領域を理解する前に含まれています。

于 2008-09-18T00:41:15.770 に答える
1

私は GregorianCalendar を使用しています - いつでもどこでも。単純な java.util.Date は複雑すぎます。

だから、私のアドバイスは - GCを使用してください、それは簡単です

于 2008-09-17T21:15:06.017 に答える
1

ジャバスクリプトでも同じです。2008 を 2008 年、31 を月の 31 日、11 を月の 31 日、11 を 12 番目の月とするのは良い考えだと考える人は、何かを吸っていたに違いありません。

一方、彼らは 3 人中 2 人で正解しました。

于 2008-09-17T21:22:11.320 に答える
1

Java でいつも私を惹きつけるのは、日時ライブラリーです。私は Joda を使用したことがありません。簡単に見てみると、かなり優れた実装のように見えます。JSR-130 を正しく理解していれば、Joda から知識を得て、最終的に JavaSE に組み込むことができます。

過去のプロジェクトでは、Java の日時オブジェクトをラップすることがよくありましたが、それ自体がかなりの作業でした。次に、日付操作にラッパーを使用しました。

于 2008-09-17T21:26:25.427 に答える
0

日付 API は、特にローカリゼーションに対処する必要がある場合、設計が非常に困難です。自分でロールバックしてみてください。少なくとも一度は実行する価値があります。Joda がこのような優れた仕事をすることができたという事実は、その開発者の真の功績です。あなたの質問に答えるために、私は自分でそれをいじったことはありませんが、そのライブラリについて良いことしか聞いていません。

于 2008-09-17T21:11:23.700 に答える
0

多くのプログラマーは Date を使用することから始めますが、Date には非推奨のオーバーロードされたコンストラクターが多数ありますが (使用が難しくなっています)、GregorianCalendar を理解すると、管理が少し簡単になります。ここの例はとても役に立ちます:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html

于 2008-09-17T21:15:24.970 に答える
0

生の Java クラスである Date と Calendar の上にある独自の日付 API を作成するのは非常に簡単です。基本的に、日付とカレンダーの両方が、2 つの概念を 1 つのクラスに詰め込もうとしているという事実に悩まされています。

  1. 日付 (つまり、年月日)
  2. インスタント (すなわち currentTimeMillis)

これを理解すると、コード内で日付のような概念を処理する方法が大きく変わります。物事はよりシンプルに、より明確に、より良くなります。あらゆる意味で!

私にとって、Joda は、少なくとも圧倒的多数の目的のために複雑すぎます。特に、標準の Java フォームに反しているという事実が好きではありません。1 つの例は、日付を解析してフォーマットする方法です。JODA の背後にいる人物である Stephen Colebourne は、JSR-310 の仕様リーダーであり、これも同じ問題に苦しんでいます (私はここ数年間、議論をフォローし、貢献してきました)。

自分でやれ; それは簡単です。MyDate (年-月-日のラップ)、Month (列挙型)、TimeOfDay (時間-分-秒-ミリ秒)、DayOfWeek (列挙型)、Instant (long 型のラップ) のクラスを入力するだけです。インスタントと日付の間で変換するときは、常にタイムゾーンを考慮してください。

これが難しいと思われる場合は、内部で Calendar と SimpleDateFormat を使用できます。あなたはこれを一日でやり遂げ、後悔することはありません.

于 2008-09-17T21:33:16.283 に答える