将数据库时间转换为IST日期时间

时间:2017-07-25 10:55:11

标签: java mysql datetime time timezone

我的数据库中存储了HH:mm:ss格式的时间值(使用MySQL' s time类型)。此时间应视为IST时区的值。运行我的Java代码的服务器遵循UTC时区。

如何在IST(或UTC millis)中的yyyy-MM-dd HH:mm:ss中获取格式化的日期时间?以下是我迄今为止尝试过的事情:

// ... Code truncated for brevity
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTime time = resultSet.getTime("send_time").toLocalTime();
LocalDateTime datetime = time.atDate(LocalDate.now());
System.out.println(datetime.format(formatter));

上面正确地在我的本地机器上打印日期时间,这是在IST上,但我关心它在远程服务器上的行为。

1 个答案:

答案 0 :(得分:4)

您的方法很好,无论计算机的时区如何,都应该有效,因为LocalTimeLocalDateTime中没有时区信息。一个可能的问题是使用LocalDate.now(),它将今天的日期返回到计算机的本地时区,而不是IST。您可能希望将其替换为LocalDate.now(ZoneId.of("Asia/Calcutta"))

或者@ OleV.V评论。您可以使用新的驱动程序工具直接派生LocalTime

LocalTime time = resultSet.getObject("send_time", LocalTime.class);

请注意您的方法可能需要注意的事项:

  • 如果您使用的时区引入了DST,您可能会在数据库中以两个相同的时间结束实际上不同的时刻 - 使用UTC来存储时间可能更加强大
  • mysql中的
  • time可以存储小于00:00且大于23:59:59.999999的值,在这种情况下,您可能会遇到Java方面的意外行为。