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

标签 java mysql datetime time timezone

我的数据库中存储有一个时间值,格式为 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 上)上正确打印了日期时间,但我担心它在远程服务器上的行为方式。

最佳答案

您的方法很好,无论您的计算机位于哪个时区,都应该有效,因为 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 端的意外行为。

关于java - 将数据库时间转换为 IST 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301248/

相关文章:

java - Java 中的语法错误

mysql - 将多个 select 语句结果存储到一个变量中

c# - 从 DatePicker 和 TimePicker 控件创建 DateTime 对象

c# - DateTime.Parse 今天(2012 年 3 月 1 日)失败! o_0

java - 当其他步骤正常工作时,Cucumber java 会抛出单个未定义的步骤

java - 如何从 Firestore 获取对象数组

java - Java 中更简单的自定义事件处理

mysql - 在 mysql 表中存储 IP 地址的理想数据类型是什么?

mysql - 如何解码这个 mysql BLOB?

python - Pandas:快速将可变数量的月添加到时间戳列