1. 序章

レガシーシステムでは、新しい日時APIも強く推奨されるJoda-Timeライブラリも利用できない日付で作業する必要がある場合があります。

この短いチュートリアルでは、Java8より前のシステムで現在の日付を取得する方法を確認するためのいくつかのアプローチを見ていきます。

2. システム時刻

現在の日付と時刻を表す単一の数値だけが必要な場合は、システム時刻を使用できます。 1970年1月1日00:00:00GMTから経過したミリ秒数を取得するには、longを返すcurrentTimeMillisメソッドを使用できます。

long elapsedMilliseconds = System.currentTimeMillis();

経過時間をより正確に測定したい場合は、nanoTime法を使用できます。 これにより、固定されているが任意の瞬間から経過したナノ秒の値が返されます。

この任意の時間は、JVM内のすべての呼び出しで同じであるため、返される値は、nanoTimeの複数の呼び出し間の経過ナノ秒の差を計算する場合にのみ役立ちます。

long elapsedNanosecondsStart = System.nanoTime();
long elapsedNanoseconds = System.nanoTime() - elapsedNanosecondsStart;

3. java.utilパッケージ

java.util パッケージのクラスを使用すると、通常、1970年1月1日00:00:00GMTから経過したミリ秒で瞬間を表すことができます。

3.1. java .util.Date

Date オブジェクトを使用して、特定の日時を表すことができます。 これには、ミリ秒の精度とタイムゾーン情報が含まれます。

使用可能なコンストラクターは多数ありますが、ローカルタイムゾーンの現在の日付を表す Date オブジェクトを作成する最も簡単な方法は、基本的なコンストラクターを使用することです。

Date currentUtilDate = new Date();

次に、特定の日時のDateオブジェクトを作成しましょう。 前述のコンストラクターを使用して、ミリ秒の値を渡すだけで済みます。

または、 SimpleDateFormat クラスを使用して、String値を実際のDateオブジェクトに変換することもできます。

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date customUtilDate = dateFormatter.parse("30-01-2020 10:11:12");

ニーズに合わせて、さまざまな日付パターンを使用できます。

3.2. java .util.Calendar

Calendar オブジェクトは、 Date と同じように実行でき、Locale も使用できるため、日付算術計算に優れています。 Locale を地理的、政治的、または文化的地域として指定できます。

TimeZoneまたはLocaleが指定されていない現在の日付を取得するには、getInstanceメソッドを使用できます。

Calendar currentUtilCalendar = Calendar.getInstance();

また、CalendarからDateへの変換には、getTimeメソッドを使用するだけです。

Date currentDate = Calendar.getInstance().getTime();

おもしろい事実として、 GregorianCalendar クラスは、世界で最も使用されているカレンダーの実装です。

4. java.sqlパッケージ

次に、同等のSQLオブジェクトを表すjava.util.Dateクラスの3つの拡張機能について説明します。

4.1. java .sql.Date

java.sql.Date オブジェクトでは、タイムゾーン情報にアクセスできず、精度は日レベルで切り捨てられます。 今日を表すために、ミリ秒のlong表現をとるコンストラクターを使用できます。

Date currentSqlDate = new Date(System.currentTimeMillis());

以前と同様に、特定の日付については、SimpleDateFormatクラスを使用して最初にjava.util.Dateに変換し、次にgetTimeを使用してミリ秒を取得できます。方法。 次に、この値をjava.sql.Dateコンストラクターに渡すことができます。

DateString表現がyyyy-[m] m- [d] d と一致する場合は、valueOfメソッドを使用できます。 ] パターン:

Date customSqlDate = Date.valueOf("2020-01-30");

4.2. java .sql.Time

java.sql.Time オブジェクトは、時、分、秒の情報へのアクセスを提供します。これも、タイムゾーンへのアクセスはありません。 ミリ秒表現を使用して、現在のTimeを取得しましょう。

Time currentSqlTime = new Time(System.currentTimeMillis());

valueOf メソッドを使用して時間を指定するには、 hh:mm:ssパターンに一致する値を渡すことができます。

Time customSqlTime = Time.valueOf("10:11:12");

4.3. java .sql.Timestamp

この最後のセクションでは、タイムスタンプクラスを使用して、SQL日付時間の両方の情報を組み合わせます。 これにより、の精度をナノ秒まで下げることができます。

現在のミリ秒数のlong値をコンストラクターにもう一度渡すことにより、Timestampオブジェクトを作成しましょう。

Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());

最後に、valueOfメソッドと必要なyyyy-[m] m- [d] d hh:mm:ss[.f… ] パターン:

Timestamp customSqlTimestamp = Timestamp.valueOf("2020-1-30 10:11:12.123456789");

5. 結論

この短いチュートリアルでは、Java 8や外部ライブラリを使用せずに、現在の日付と特定の瞬間の日付を取得する方法を説明しました。

いつものように、記事のコードはGitHubから入手できます。