このjava.util.Date
クラスは、設計が不十分で、混乱を招き、厄介な古いデータ時間クラスの一部です。それらを避けてください。
代わりに、java.time クラスを使用してください。
java.time
java.timeフレームワークは、Java 8 以降に組み込まれています。java.util.Date
これらのクラスは、 、.Calendar
、 &などの古い面倒な日時クラスに取って代わりますjava.text.SimpleDateFormat
。Joda -Timeチームは、java.time への移行についてもアドバイスしています。
詳細については、 Oracle チュートリアルを参照してください。また、Stack Overflow で多くの例と説明を検索してください。
java.time 機能の多くは、ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPで Android に適合されています。
Instant
最初のステップは、古いクラスから抜け出し、新しいクラスに入ることです。変換のために、新しいメソッドが古いクラスに追加されました。java.util.Date
クラスは現在提供していますtoInstant
。AnInstant
は、ナノ秒単位の解像度を持つ UTC のタイムライン上の瞬間です。
Instant instant = myUtilDate.toInstant();
タイムゾーン
日付の決定にはタイムゾーンが必要です。任意の時点で、日付はタイム ゾーンによって世界中で異なります。パリの真夜中の数分後でも、モントリオールではまだ「昨日」です。
クラスはZoneId
タイムゾーンを表します。EST
やなどの主流メディアで一般的に見られる 3 ~ 4 文字の略語は使用しないことに注意してくださいIST
。これらは真のタイム ゾーンではなく、標準化されておらず、一意でもありません (!)。代わりに、tz データベースで format で定義されている適切なタイムゾーンcontinent/region
を使用してください。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
ZonedDateTime
必要な部品について問い合わせます。
int year = zdt.getYear();
int month = zdt.getMonthValue(); // Or handy Month enum… zdt.getMonth();
int dayOfMonth = zdt.getDayOfMonth();
LocalDate
時間帯とタイムゾーンを明らかに無視したい大規模な作業を行っている場合は、このLocalDate
クラスを使用してください。
LocalDate localDate = zdt.toLocalDate();