java - 将 java.sql.Date 转换为 LocalDateTime
问题描述
我有一个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);
这个答案对我不起作用,因为我java.sql.Date
没有getTimestamp方法。
作为参考,这个问题解决了相反的转变。
解决方案
您正在使用糟糕的日期时间类,这些类在几年前被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() ;
你要了一个java.time.LocalDateTime
对象。您有必要的日期部分。现在您需要分配时间部分。
LocalTime localTime = LocalTime.of( 15 , 30 );
结合。
LocalDateTime localDateTime = LocalDateTime.of( localDate, localTime ) ;
ALocalDateTime
本质上是模棱两可的。日本的下午 3:30 与摩洛哥的下午 3:30 不同。
要确定一个时刻,时间轴上的一个特定点,请将您LocalDateTime
放在时区的上下文中。你得到一个ZonedDateTimeObject
.
ZoneId zoneId = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zonedDateTime = localDateTime.atZone( zoneId ) ;
要查看 UTC 中看到的那个时刻,与 UTC 的偏移量为零小时-分钟-秒,请提取一个Instant
.
Instant instant = zonedDateTime.toInstant() ;
推荐阅读
- javascript - 为什么这个简单的 JS 承诺会返回一个承诺?
- c# - 为什么我的 gridview 不返回我更新的内容?
- mongodb - 如何使用let与mongoose js的导入模型进行管道
- google-cloud-dataflow - Google Dataflow:从正在运行的管道本身获取作业名称和开始时间
- mobile - 如何创建用于移动查看的下拉菜单栏?
- react-native - Expo - 本地通知在设备上不起作用
- python - 我可以使用 python 脚本获取用户在登录 Maximo 时运行的查询吗?
- c# - 为什么 INotifyPropertyChanged 的 SetProperty() 方法需要一个 ref 参数?
- java - 如何通过对话框类中的 button-actionPerformed 从我的面板类中调用一个方法,得到它在面板类中的实例?
- sql-server - tSQLt 测试中的模拟和安全权限如何工作?