tl; dr
周りの現在の「ベストプラクティス」を助言Date
し、Calendar
それは常に優先するのが最善であるCalendar
以上Date
これらのレガシークラスは完全に避けてください。代わりにjava.timeクラスを使用してください。
細部
Ortomalaによって回答 Lokniは、近代的な使用することをお勧めするのは正しいですjava.timeのクラスではなく、面倒な古いレガシー日付時刻クラス(Date
、Calendar
など)。しかし、その回答は、間違ったクラスを同等のものとして示唆しています(その回答に関する私のコメントを参照してください)。
java.timeの使用
java.timeクラスがある広大なレガシー日時クラス、夜と日の差に比べて改善。古いクラスは設計が不十分で、混乱し、面倒です。可能な限り、古いクラスは避けてください。ただし、古い/新しいとの間で変換を行う必要がある場合は、古いクラスに追加する新しいメソッドを呼び出すことで変換できます。
変換の詳細については、別の質問への回答と気の利いた図を参照してください。java.util.Dateを「java.time」タイプに変換しますか?。
Stack Overflowを検索すると、java.timeの使用に関する何百ものサンプルの質問と回答が得られます。しかし、ここに簡単な概要があります。
Instant
で現在の瞬間を取得しInstant
ます。このInstant
クラスは、ナノ秒の分解能(小数点以下9桁まで)でUTCのタイムライン上の瞬間を表します。
Instant instant = Instant.now();
ZonedDateTime
特定の地域の実時間のレンズを通して同じ瞬間を確認するには、タイムゾーン()を適用してを取得します。ZoneId
ZonedDateTime
タイムゾーン
指定適切なタイムゾーン名をの形式でcontinent/region
、のようなAmerica/Montreal
、Africa/Casablanca
またはPacific/Auckland
。決してなど3-4文字の略称を使用していないEST
か、IST
そのままではない真の時間帯ではなく、標準化、さらには一意ではありません(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone();
オフセット
タイムゾーンは、UTCからのオフセットにおける地域の変更履歴です。ただし、フルゾーンなしでオフセットのみが与えられる場合があります。その場合は、OffsetDateTime
クラスを使用してください。
ZoneOffset offset = ZoneOffset.parse( "+05:30" );
OffsetDateTime odt = instant.atOffset( offset );
時間帯の使用は、単なるオフセットの使用よりも望ましいです。
LocalDateTime
Local…
クラスの「ローカル」とは、特定の場所ではなく、任意の場所を意味します。そのため、名前は直観に反する場合があります。
LocalDateTime
、LocalDate
、およびLocalTime
意図的オフセットまたはタイムゾーンに関する情報が不足しています。だから彼らは、ないではない、実際の瞬間を表し、それらはないタイムライン上の点。疑問がある場合や混乱している場合は、ではZonedDateTime
なくを使用してくださいLocalDateTime
。詳細については、スタックオーバーフローを検索してください。
文字列
日時オブジェクトをその値を表す文字列と混同しないでください。文字列を解析して日時オブジェクトを取得したり、日時オブジェクトから文字列を生成したりできます。ただし、文字列は日時そのものではありません。
java.timeクラスでデフォルトで使用される標準ISO 8601形式について学びます。
java.timeについて
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
JDBC 4.2以降に準拠したJDBCドライバーを使用すると、java.timeオブジェクトをデータベースと直接交換できます。文字列もjava.sql。*クラスも必要ありません。
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。