为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中处理MySQL日期时间和时间戳

/ 猿问

在Java中处理MySQL日期时间和时间戳

MMTTMM 2019-08-17 15:39:37

在Java中处理MySQL日期时间和时间戳

在Java应用程序中,使用日期时间和时间戳的混合在MySQL数据库中提取和输入日期信息方面会有什么好处?



查看完整描述

3 回答

?
蝴蝶不菲

MySQL 文档包含有关将MySQL类型映射到Java类型的信息。通常,对于MySQL日期时间和时间戳,您应该使用java.sql.Timestamp。一些资源包括:

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

编辑:

正如其他人所指出的那样,使用字符串的建议可能会导致问题。


查看完整回答
反对 回复 2019-08-17
?
不负相思意

BalusC对该问题进行了很好的描述,但缺乏一个好的端到端代码,用户可以自己选择并测试它。

最佳做法是始终将日期时间以UTC时区存储在DB中。Sql时间戳类型没有时区信息。

将datetime值写入sql db时

    //Convert the time into UTC and build Timestamp object.
    Timestamp ts = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC")));
    //use setTimestamp on preparedstatement
    preparedStatement.setTimestamp(1, ts);

从DB读取值返回java时,

  1. 在java.sql.Timestamp类型中读取它。

  2. 使用LocalDateTime类中的atZone方法将DateTime值设置为UTC时区中的时间。

  3. 然后,将其更改为您想要的时区。我在这里将它改为多伦多时区。

    ResultSet resultSet = preparedStatement.executeQuery();resultSet.next();Timestamp timestamp = resultSet.getTimestamp(1);ZonedDateTime timeInUTC = timestamp.toLocalDateTime().atZone(ZoneId.of("UTC"));LocalDateTime timeInToronto = LocalDateTime.ofInstant(timeInUTC.toInstant(), ZoneId.of("America/Toronto"));



查看完整回答
反对 回复 2019-08-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信