日時データの取得はシステム開発やアプリ開発には必ず必要となりますが、Javaは開発の幅が広いため、日時の取得方法も様々です。
そこで今回は、Javaプログラマーを目指して学習する上で絶対に知っておかなければならない”timestampクラス”について解説してみたいと思います。
使い分けの方法などにも触れていきたいと思いますので最後まで読んでみてください。
Timestampとは
“timestamp”は、Date/Time APIと呼ばれるjava.util.Dateのサブクラスです。
この”timestamp”はデータベースで日時取得をする際に利用しますが、java.util.Dateとの違いは保持の幅です。
java.util.Dateが秒まで保持できるのに対し、java.sql.Timestampは小数点以下の時間数値(ミリ秒)まで保持することが出来ます。
日時取得のAPIには”timestamp”の他にも”TimeZone”や”LocalTime”などがあります。
現在時刻を取得する
それでは早速”timestamp”を使って現在時刻を取得する方法を見ていきましょう。
“timestamp”で現在時刻を取得するにはコンストラクタでインスタンスを生成します。
記述ルールは以下の通りです。
Timestamp(long time)
また引数には「1970年1月1日0時0分0秒GMT」を基準とした時間をミリ秒で表した値を指定します。
次のコードを見てください。
import java.sql.Timestamp; public class TimestampSample { public static void main(String[] args) { long millis = System.currentTimeMillis(); Timestamp timestamp = new Timestamp(millis); System.out.println(timestamp.toString()); } }
実行結果
2019-11-26 21:38:32.597
上記のコードではまず、”java.lang.System”クラスの”currentTimeMillis”メソッドを使い、グリニッジ標準時からの経過時間をミリ秒で取得した後、その取得値を引数としたTimestampオブジェクトを作成しています(尚この取得した値はOS依存です。)。
“timestamp”を出力する際に、「yyyy-mm-dd hh:mm:ss.fff」の形式で出力されていることが確認できます。
またSystem.out.printlnでtoStringメソッドを使用することにより、”Timestamp”が保持する値を文字列として返すようになっています。
文字列から”timestamp”を作成する
先ほどは”timestamp”を文字列に変換して出力する方法について解説しましたが、逆に文字列からTimestampを作成することも出来ます。
次のコードを見てください。
import java.sql.Timestamp; public class TimestampSample { public static void main(String[] args) { String datetime = "2019-05-01 01:02:03.123456789"; Timestamp timestamp = Timestamp.valueOf(datetime); System.out.println(timestamp.toString()); } }
実行結果
2019-05-01 01:02:03.123456789
このコードではまずメンバ変数”datetime”で任意の値を「yyyy-mm-dd hh:mm:ss.fffffffff」の形式で成形したものを初期化し、”timestamp”に割り当てています。
こうすることで、実行結果では形式に則った出力がなされていることが確認できます。
一点注意が必要なのは、文字列からtimestampに変換する場合には「yyyy-mm-dd hh:mm:ss.fffffffff」の形式以外だとコンパイルエラーとなる点です。
尚、小数点以下の値(ミリ秒)については9桁まで指定することが出来ます。
時刻を成形する
“timestamp”を文字列に成形する際には、表示形式を任意の形に成形することが出来ます。
次のコードを見てください。
import java.sql.Timestamp; import java.text.SimpleDateFormat; public class TimestampSample { public static void main(String[] args) { long millis = System.currentTimeMillis(); Timestamp timestamp = new Timestamp(millis); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String str = sdf.format(timestamp); System.out.println(str); } }
実行結果
2019/11/26
このコードでは、”SimpleDateFormat”を使ってフォーマットする形式を指定し、その後に”format”を使用することで指定したフォーマットで文字列に変換し出力させています。
実行結果でも任意の形式に変換されていることが確認できます。
Dateを使った記述方法
先ほど”timestamp”を使う際に”System.currentTimeMillis()”を使う方法を説明しましたが、もう一つ、これとは別の”Date”を使った記述をご紹介します。
import java.sql.Timestamp; import java.util.Date; public class TimestampSample { public static void main(String[] args) { Date date = new Date(); System.out.println(new Timestamp(date.getTime())); } }
実行結果
2019-11-26 22:15:59.824
“timestamp”にDateクラスを使用することで、現在時刻を取得することが出来ます。
先ほど説明した「文字列からtimestampに変換する方法」で利用すると、楽にtimestampを指定出来ることを覚えておきましょう。
まとめ
いかがでしたか?
今回は”timestamp”の取得方法と文字列からの変換について解説してみました。
“timestamp”はそれほど覚えることがありませんが、実用度でいうと最重要となるケースがほとんどです(開発時には必ずと言っていいほど使用します)。
現在学習中の方も、”timestamp”については非常に簡単にマスターできるはずですので、この記事のサンプルコードを見て流れと形を丸暗記するようにしてください。
また今回は紹介できませんでしたが、他のAPIについても”timestamp”と同じようにそう難しいコードではありませんので、挑戦してみてはいかがでしょうか?