Java
java8

java.util.Date, java.sql.Date, LocalDate, ZonedDateTimeの変換方法

目的

Java8にLocalDateが追加されて、非常に便利ではある。しかしJDBC使用時はjava.sql.Date, POI使用時にはjava.util.Dateを使用するが、LocalDateでは相互運用は考えられていない。そこで、業務でよく使用する3つについて、ついでにZonedDateTimeも、相互運用が楽になるように変換方法をまとめた。

各変換方法

  • java.sql.Date→LocalDate
sqlDateとutilDateとLocalDate.java
public LocalDate convertToLocalDate(java.sql.Date sqlDate){
    return sqlDate.toLocalDate();
}
  • java.sql.Date→java.util.Date
sqlDateとutilDateとLocalDate.java
public java.util.Date convertToUtilDate(java.sql.Date sqlDate){
    return sqlDate;
}
  • java.util.Date→LocalDate
sqlDateとutilDateとLocalDate.java
public LocalDate convertToLocalDate(java.util.Date utilDate){
    return utilDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
  • java.util.Date→java.sql.Date
sqlDateとutilDateとLocalDate.java
public java.sql.Date convertToSqlDate(java.util.Date utilDate){
    return new java.sql.Date(utilDate.getTime());
}
  • LocalDate→java.util.Date
sqlDateとutilDateとLocalDate.java
public java.util.Date convertToUtilDate(LocalDate localDate){
     return java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
  • LocalDate→java.sql.Date
sqlDateとutilDateとLocalDate.java
public java.sql.Date convertToSqlDate(LocalDate localDate){
    return java.sql.Date.valueOf(localDate);
}
  • java.util.Date→ZonedDateTime
sqlDateとutilDateとLocalDate.java
public ZonedDateTime convertToZonedDateTime(java.util.Date utilDate){
    return utilDate.toInstant().atZone(ZoneId.systemDefault());
}

  • java.sql.Date→ZonedDateTime
sqlDateとutilDateとLocalDate.java
public ZonedDateTime convertToZonedDateTime(java.sql.Date sqlDate){
    return sqlDate.toLocalDate().atStartOfDay(ZoneId.systemDefault());
}
  • LocalDate→ZonedDateTime
sqlDateとutilDateとLocalDate.java
public ZonedDateTime convertToZonedDateTime(LocalDate localDate){
    return localDate.atStartOfDay(ZoneId.systemDefault());
}
  • ZonedDateTime→java.util.Date
sqlDateとutilDateとLocalDate.java
public java.util.Date convertToUtilDate(ZonedDateTime zonedDateTime){
    return java.util.Date.from(zonedDateTime.toInstant());
}
  • ZonedDateTime→java.sql.Date
sqlDateとutilDateとLocalDate.java
public java.sql.Date convertToSqlDate(ZonedDateTime zonedDateTime){
    return java.sql.Date.valueOf(zonedDateTime.toLocalDate());
}
  • ZonedDateTime→LocalDate
sqlDateとutilDateとLocalDate.java
public LocalDate convertToLocalDate(ZonedDateTime zonedDateTime){
    return zonedDateTime.toLocalDate();
}

まとめ

java.util.Date, java.sql.Date,LocalDate,ZonedDateTimeの変換方法をまとめた。ソースは、テストも含めてこちらにあります。