Sab*_*ine 5 java mysql time timezone zoneddatetime
美好的一天,
我创建了将在全球范围内使用的Web应用程序服务。
因此,我需要将日期时间值存储在UTC中,并以墙上时间的时钟表示给最终用户。
读完堆栈溢出后,我知道应该:
在这些值之间转换时出现了问题。
使用JDBC时,必须进行以下转换:
java.sql.Timestamp <-> java.time.ZonedDateTime 
Run Code Online (Sandbox Code Playgroud)
我的代码:
// Get current zonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
// Convert zonedDateTime to java.sql.Timestamp before saving to DB
Timestamp = Timestamp.from(zonedDateTime.toInstant());
// Get zonedDateTime from resultSet
Timestamp timestamp = (Timestamp) resultSet.getObject("created");
ZonedDateTime zonedDateTime = 
    ZonedDateTime.ofInstant(ts.toInstant(), ZoneOffset.UTC))
Run Code Online (Sandbox Code Playgroud)
当我使用时:
zonedDateTimeBeforeSave.isEqual(zonedDateTimeAfterSave);
Run Code Online (Sandbox Code Playgroud)
它返回false(我需要在我的域模型的重写的equal方法中将它们进行比较)
下面两种打印出来:
zonedDateTimeBeforeSave:2017-01-24T20:18:17.720Z
zonedDateTimeAfterSave:2017-01-24T20:18:17Z
问题:
谢谢
看了这篇文章和评论后,我终于找到了问题所在:
原因是我的 MariaDB JDBC 驱动程序
 
是旧的 1.1.7 版本,并且参数“useFractionalSeconds”设置为 false。
 
解决方案是将此参数设置为 true(通过 URL 进行 f.ex)或更新驱动程序。截至 2017 年 1 月 25 日,当前最新版本为 1.5.7
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2905 次  |  
        
|   最近记录:  |