我的数据库中存储有一个时间值,格式为 HH:mm:ss(使用 MySQL 的 time 类型)。该时间被视为 IST 时区的值。我的 Java 代码运行的服务器遵循 UTC 时区。
如何获取 IST(或 UTC 毫秒)中 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 上)上正确打印了日期时间,但我担心它在远程服务器上的行为方式。
最佳答案
您的方法很好,无论您的计算机位于哪个时区,都应该有效,因为 LocalTime
或 LocalDateTime
中都没有时区信息。一个可能的问题是 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 端的意外行为。
关于java - 将数据库时间转换为 IST 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301248/