java.sql日時クラス↔Date And Time API系の変換

「Timestamp」「java.sql.Date」「java.sql.Time」の変換手順をまとめる。

執筆時バージョン
Java

Java SE 8

java.util.DateやCaldnarにおける変換はこちら→リンク。JavaSE8現在ではJDBCがDate And Time APIに対応していないため、場合によっては自力で対応する。

sql日時クラスからDateTimeAPIへの変換
Figure 1. sql日時クラスからDateTimeAPIへの変換

java.sqlの日時クラスの変換は、各クラスによって考え方が異なる。

「Timesatmp」についてはjava.util.DateやCalendarクラスと同様に、Instantを用いた変換が可能。加えてLocalDateTimeへの直接変換も可能。

「java.sql.Date」「java.sql.Time」はnstantを用いた変換ができない。継承関係からいうとjava.util.Dateを継承しているのでtoInstant()メソッドはあるが、UnsupportedOperationExceptionになるので要注意。 代わりに「LocalDate」「LocaTime」への直接変換が用意されている。

Timesatmpの変換

Timesatmp↔Instantの変換

java.util.DateやCalendarクラスと同様に、Instantを用いた変換が可能。

Timesatmp→Instant
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
Instant instant = timestamp.toInstant();
Instant→Timesatmp
Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);

Timesatmp↔LocalDateTimeの変換

toLocalDateTime()とvalueOf()で相互変換可能。

Timesatmp→LocalDateTime
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
LocalDateTime localDateTime = timestamp.toLocalDateTime();
LocalDateTime→Timesatmp
LocalDateTime localDateTime = LocalDateTime.now();
Timestamp timestamp = Timestamp.valueOf(localDateTime);

java.sql.Date↔LocalDateの変換

toLocalDate()とvalueOf()で相互変換可能。toInstant()してはいけない。

java.sql.Date→LocalDate
java.sql.Date javaSqlDate =  new java.sql.Date(System.currentTimeMillis());
LocalDate localDate = javaSqlDate.toLocalDate();
LocalDate→java.sql.Date
LocalDate localDate = LocalDate.now();
java.sql.Date javaSqlDate = java.sql.Date.valueOf(localDate);

java.sql.Time↔LocalTimeの変換

toLocalTime()とvalueOf()で相互変換可能。toInstant()してはいけない。

java.sql.Time→LocalTime
java.sql.Time javaSqlTime =  new java.sql.Time(System.currentTimeMillis());
LocalTime localTime = javaSqlTime.toLocalTime();
LocalTime→java.sql.Time
LocalTime localTime = LocalTime.now();
java.sql.Time javaSqlTime = java.sql.Time.valueOf(localTime);

Appendix B: 改訂履歴

  • v1.0, 2016-07-13: 初稿