时间:2010-07-24 02:53:55

标签: java mysql date jdbc timestamp

3 个答案:

答案 0 :(得分:103)

答案 1 :(得分:8)

答案 2 :(得分:4)

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

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

将日期时间值写入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. 使用atZone将DateTime值设置为UTC时区中的时间 LocalDateTime类中的方法。
  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"));