Timestampクラスとは
Javaのjava.sql.Timestamp
クラスは、1970年1月1日00:00:00からのミリ秒単位の経過時間を表すためのクラスです。これは、データベースのタイムスタンプ値を表現するために使用されます。
Timestamp
クラスはjava.util.Date
クラスを拡張しており、ナノ秒の精度を追加しています。つまり、Timestamp
クラスは、ミリ秒単位の時間とナノ秒単位の時間を保持します。
以下は、Timestamp
クラスのインスタンスを作成する一例です:
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
このコードは、現在のシステム時間(ミリ秒単位)を使用して新しいTimestamp
オブジェクトを作成します。このオブジェクトは、その後、データベースに保存したり、時間の計算に使用したりすることができます。また、Timestamp
クラスは、時間の比較やフォーマット変換など、さまざまな便利なメソッドを提供しています。これらのメソッドを使用することで、時間に関する複雑な操作を簡単に行うことができます。
valueOfメソッドの使い方
JavaのTimestamp
クラスのvalueOf
メソッドは、文字列をTimestamp
オブジェクトに変換するための静的メソッドです。このメソッドは、以下の形式の文字列を受け取ります:
yyyy-[m]m-[d]d hh:mm:ss[.f...]
ここで、yyyy
は4桁の年、mm
は2桁の月、dd
は2桁の日、hh
は2桁の時、mm
は2桁の分、ss
は2桁の秒、そしてf
はナノ秒を表します。
以下は、valueOf
メソッドを使用して文字列からTimestamp
オブジェクトを作成する一例です:
Timestamp ts = Timestamp.valueOf("2020-01-01 10:20:30.123456789");
このコードは、指定された文字列をTimestamp
オブジェクトに変換します。このオブジェクトは、その後、データベースに保存したり、時間の計算に使用したりすることができます。
ただし、valueOf
メソッドは、指定された文字列が上記の形式に従っていない場合、IllegalArgumentException
をスローします。したがって、このメソッドを使用する際は、入力文字列の形式を確認することが重要です。
TimestampとStringの変換
JavaのTimestamp
クラスは、Timestamp
オブジェクトと文字列の間で変換を行うためのメソッドを提供しています。これらのメソッドを使用することで、データベースやファイルから読み取った文字列をTimestamp
オブジェクトに変換したり、その逆の操作を行ったりすることができます。
StringからTimestampへの変換
前述の通り、Timestamp
クラスのvalueOf
メソッドを使用して、文字列からTimestamp
オブジェクトを作成することができます。以下はその一例です:
Timestamp ts = Timestamp.valueOf("2020-01-01 10:20:30.123456789");
TimestampからStringへの変換
Timestamp
オブジェクトから文字列への変換は、toString
メソッドを使用して行います。このメソッドは、Timestamp
オブジェクトを以下の形式の文字列に変換します:
yyyy-mm-dd hh:mm:ss.fffffffff
以下は、toString
メソッドを使用してTimestamp
オブジェクトから文字列を作成する一例です:
Timestamp ts = new Timestamp(System.currentTimeMillis());
String str = ts.toString();
このコードは、現在のシステム時間を表すTimestamp
オブジェクトを作成し、それを文字列に変換します。この文字列は、その後、データベースに保存したり、ログに出力したりすることができます。
Timestampの精度と計算方法
JavaのTimestamp
クラスは、時間をミリ秒単位とナノ秒単位で保持します。これにより、Timestamp
は他の日付/時間クラスよりも高い精度を提供します。
精度
Timestamp
クラスの精度はナノ秒単位です。これは、1秒を10億(1,000,000,000)に等しいナノ秒に分割します。しかし、実際の精度はシステムのクロック精度に依存します。多くのシステムでは、クロック精度はミリ秒(1秒を1000に等しいミリ秒に分割)またはマイクロ秒(1秒を1,000,000に等しいマイクロ秒に分割)です。
計算方法
Timestamp
クラスは、java.util.Date
クラスを拡張しているため、日付と時間の計算にはDate
クラスのメソッドを使用できます。また、Timestamp
クラス自体も時間の加算や減算などのメソッドを提供しています。
例えば、現在のTimestamp
に1時間を加算するには、以下のようにします:
Timestamp ts = new Timestamp(System.currentTimeMillis());
long oneHourInMilliseconds = 60 * 60 * 1000;
ts.setTime(ts.getTime() + oneHourInMilliseconds);
このコードは、現在のシステム時間を表すTimestamp
オブジェクトを作成し、その時間に1時間(ミリ秒単位)を加算します。
また、2つのTimestamp
間の差を計算するには、以下のようにします:
Timestamp ts1 = Timestamp.valueOf("2020-01-01 10:20:30.123456789");
Timestamp ts2 = Timestamp.valueOf("2020-01-02 10:20:30.123456789");
long diffInMilliseconds = ts2.getTime() - ts1.getTime();
このコードは、指定された2つの文字列をTimestamp
オブジェクトに変換し、それらの時間の差(ミリ秒単位)を計算します。
Timestampの実用例
JavaのTimestamp
クラスは、データベースとのやり取りや、時間の計算など、さまざまな場面で使用されます。以下に、その具体的な使用例をいくつか示します。
データベースとのやり取り
データベースには、作成日時や更新日時など、タイムスタンプを必要とする情報が多く含まれています。Timestamp
クラスは、これらの情報を表現し、データベースとのやり取りを行うために使用されます。
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO my_table (name, created_at) VALUES (?, ?)");
pstmt.setString(1, "My Name");
pstmt.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
pstmt.executeUpdate();
このコードは、現在のシステム時間を表すTimestamp
オブジェクトを作成し、それをデータベースに保存します。
時間の計算
Timestamp
クラスは、時間の計算を行うためにも使用されます。例えば、2つの時間の差を計算したり、特定の時間を加算または減算したりすることができます。
Timestamp ts1 = new Timestamp(System.currentTimeMillis());
Thread.sleep(1000); // Wait for 1 second
Timestamp ts2 = new Timestamp(System.currentTimeMillis());
long diffInMilliseconds = ts2.getTime() - ts1.getTime();
このコードは、2つのTimestamp
オブジェクトの時間の差(ミリ秒単位)を計算します。
これらの例からわかるように、Timestamp
クラスは、時間に関する情報を扱うJavaプログラムにおいて、非常に有用なツールです。