将 java.sql.Date 转换为 LocalDateTime

J W*_*uck 1 java date

我有一个java.sql.Date对象,想将其转换为java.time.LocalDateTime对象。

为了进行比较,我可以使用以下方法进行类似的转换java.util.Date

java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
System.out.println("date with time: " + utilDate);
Run Code Online (Sandbox Code Playgroud)

这个答案对我不起作用,因为我java.sql.Date没有getTimestamp方法。

作为参考,这个问题涉及相反的转换。

Bas*_*que 5

您正在使用可怕的日期时间类,这些类在几年前就被 JSR 310 中定义的现代java.time类所取代。

  • 不使用java.sql.Date
  • 不使用java.util.Date
  • 不使用java.sql.Timestamp
  • 不使用java.util.Calendar

仅使用java.time类。

要与数据库交换日期时间值,请使用 JDBC 4.2 或更高版本。

该类java.sql.Date假装表示仅日期值。

如果您收到一个java.sql.Date对象,请立即将其转换为java.time.LocalDate. toLocalDate使用添加到旧类中的新方法。

LocalDate localDate  = myJavaSqlDate.toLocalDate() ;
Run Code Online (Sandbox Code Playgroud)

你要了一个java.time.LocalDateTime物体。您有必要的日期部分。现在您需要分配一天中的时间部分。

LocalTime localTime = LocalTime.of( 15 , 30 );
Run Code Online (Sandbox Code Playgroud)

结合。

LocalDateTime localDateTime = LocalDateTime.of( localDate, localTime ) ;
Run Code Online (Sandbox Code Playgroud)

ALocalDateTime本质上是有歧义的。日本的下午 3:30 与摩洛哥的下午 3:30 是不同的时刻。

要确定某个时刻(时间轴上的特定点),请将您置于LocalDateTime时区的上下文中。你得到一个ZonedDateTimeObject.

ZoneId zoneId = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zonedDateTime = localDateTime.atZone( zoneId ) ;
Run Code Online (Sandbox Code Playgroud)

要以 UTC 格式查看该时刻(与 UTC 的偏移量为零时-分-秒),请提取Instant.

Instant instant = zonedDateTime.toInstant() ;
Run Code Online (Sandbox Code Playgroud)