1.クラシック日付/時刻API
java.util.Date 类
java.sql.Date 类
java.util.Calendar 类
java.util.GregorianCalendar 类
java.util.TimeZone 类
java.sql.Time 类
java.sql.Timestamp 类
1.java.util.Dateクラス
Dateクラスは、ミリ秒の精度で特定の時刻を表します。java.utilパッケージのDateクラスは、Serializable、Cloneable、およびComparableインターフェースを実装します。これは、Javaで日付と時刻を処理するためのコンストラクターとメソッドを提供します。
コンストラクターはまだ非推奨ではありません
Date():現在の日付と時刻を表す日付オブジェクトを作成します。
Date(longミリ秒):1970年1月1日00:00:00GMTから指定されたミリ秒のDateオブジェクトを作成します。
2、java.sql.Date
コンストラクターDate(longミリ秒)は、1970年1月1日00:00:00GMT以降の指定されたミリ秒のSQL日付オブジェクトを作成します。
3、java.util.Calendar
Java Calendarクラスは、特定の瞬間とMONTH、YEAR、HOURなどの一連のカレンダーフィールドとの間で日付を変換するメソッドを提供する抽象クラスです。Objectクラスを継承し、Comparableインターフェイスを実装します。
4、java.util.GregorianCalendar
GregorianCalendarは、Calendarの具体的なサブクラスであり、世界のほとんどの地域で使用されている標準のカレンダーシステムを提供します。
5、java.util.TimeZone
TimeZoneクラスは、タイムゾーンのオフセットを表し、夏時間を計算するためにも使用されます。
タイムゾーン参照コードを設定する
final TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone.setDefault(timeZone);
6、java.sql.Time
java.util.Dateクラスから継承されます。これにより、JDBCAPIはそれをSQLTIME値として認識できます。Timeクラスは、時間値のJDBCエスケープ構文をサポートするためのフォーマットおよび解析操作を追加します。
7、java.sql.Timestamp
java.util.Dateクラスから継承されます。これにより、JDBCAPIはそれをSQLTIMESTAMP値として認識できます。SQL TIMESTAMPの小数秒の値を保存する機能が追加され、小数秒をナノ秒の精度で指定できるようになります。Timestampは、タイムスタンプ値のJDBCエスケープ構文をサポートするためのフォーマットおよび解析操作も提供します。
第二に、古典的なAPIに存在する問題
スレッドセーフ:元のDateクラスとCalendarクラスは、スレッドセーフを提供しません。そのため、開発者が知っておく必要のある、デバッグが難しい同時実行の問題が発生します。Java 8の新しい日時APIは、スレッドの安全性と不変性を提供するため、開発者の並行性の問題を回避します。
悪いAPIデザイン:従来の日付とカレンダーのAPIは、基本的な日常の機能を実行する方法を提供していません。Java 8で導入されたDateクラスとTimeクラスは、ISO中心であり、日付、時刻、期間、および期間に対して操作を実行するためのさまざまなメソッドを提供します。
タイムゾーンの処理の難しさ:従来のDateクラスとCalendarクラスでタイムゾーンを処理することは、開発者がそれらのロジックを作成する必要があるため、困難です。新しいAPIを使用すると、ローカルAPIとZonedDate /TimeAPIを使用してタイムゾーンの処理を簡単に行うことができます。
3.Java8日付/時刻API
Java8のDate-TimeAPIのほとんどのクラスは不変オブジェクトを作成します。つまり、オブジェクトは作成後に変更できません。不変オブジェクトの値を変更するには、新しいオブジェクトを元のオブジェクトの変更されたコピーとして作成する必要があります。これは、Date-TimeAPIが定義上スレッドセーフであることも意味します。
java.time.LocalDate 类
java.time.LocalTime 类
java.time.LocalDateTime 类
java.time.MonthDay 类
java.time.OffsetTime 类
java.time.OffsetDateTime 类
java.time.Clock 类
java.time.ZonedDateTime 类
java.time.ZoneId 类
java.time.ZoneOffset 类
java.time.Year 类
java.time.YearMonth 类
java.time.Period 类
java.time.Duration 类
java.time.Instant 类
java.time.DayOfWeek 枚举
java.time.Month 枚举
java.time.LocalDate:ISOカレンダーの年、月、日を表し、時刻なしで日付を表すのに役立ちます。生年月日や結婚日など、日付のみの情報を表すために使用できます。
java.time.LocalTime:時間のみを扱います。映画の時間や地元の図書館の開館時間や閉館時間など、人に基づいた1日の時間を表すのに便利です。
java.time.LocalDateTime:タイムゾーンではなく、日付と時刻を処理します。これは、LocalDateとLocalTimeの組み合わせです。
// 获取当前时间
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 两种写法都可以
System.out.println(dateTimeFormatter.format(localDateTime));
System.out.println(localDateTime.format(dateTimeFormatter));
java.time.ZonedDateTime:LocalDateTimeクラスをZoneIdクラスで指定されたゾーン情報と組み合わせます。これは、タイムゾーン情報とともに完全な日付のタイムスタンプを表します。
java.time.OffsetTime:タイムゾーンIDなしで、グリニッジ/UTCからの対応するタイムゾーンオフセットで時間を処理します。
java.time.OffsetDateTime:タイムゾーンIDなしで、グリニッジ/UTCからの対応するタイムゾーンオフセットで日付と時刻を処理します。
java.time.Clock:任意のタイムゾーンの現在の時刻、日付、時刻へのアクセスを提供します。Clockクラスの使用はオプションですが、この機能を使用すると、コードが他のタイムゾーンで機能するかどうか、または時間が変更されない固定クロックを使用するかどうかをテストできます。
java.time.Instant:タイムライン上のナノ秒の開始を表し(EPOCH以降)、マシン時間を表すタイムスタンプを生成するために使用できます。エポックの前に発生するモーメントは負の値を持ち、エポックの後に発生するモーメントは正の値を持ちます。
java.time.Duration:このクラスは日、時間、分に変換するメソッドを提供しますが、年、月、日などの日付ベースの構成を使用しない、秒またはナノ秒単位の2つの瞬間の差。
java.time.Period:日付ベースの値(年、月、日)で日付間の差を定義するために使用されます。
java.time.ZoneId:タイムゾーン識別子を宣言し、InstantとLocalDateTimeの間で変換するためのルールを提供します。
java.time.ZoneOffset:グリニッジ/UTC時間からのタイムゾーンオフセットを記述します。
java.time.format.DateTimeFormatter:さまざまな定義済みのフォーマッターを提供するか、独自のフォーマッターを定義できます。日時値を解析およびフォーマットするためのparse()またはformat()メソッドがあります。