【发布时间】:2020-06-28 22:06:44
【问题描述】:
我的部分表定义(MySQL)如下:
+-----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+----------------+
| ... | ... | .. | ... | ... | ... |
| timestamp | datetime | YES | | NULL | |
| ... | ... | .. | ... | ... | ... |
+-----------+----------+------+-----+---------+----------------+
我想使用 JDBC 更新时间戳字段。假设时间戳为 UTC。
在我的 Java 代码中,我获取时间戳字段如下:
Timestamp datetime = new Timestamp(new Date().getTime());
java.util.Date 的文档指出:
尽管 Date 类旨在反映协调世界时 (UTC),但它可能并不完全如此,具体取决于主机环境Java 虚拟机。
不幸的是,在我的 Windows 10 环境(java 版本“1.8.0_231”)中,Date 对象反映了我的本地时区。因此,添加到数据库的时间戳是本地时区,而不是 UTC。
Q) 如何获取 UTC 时间戳,以便将正确的值添加到数据库中?
【问题讨论】:
-
注意类型的描述。在 MySQL 中,
datetime是一种在没有时区信息的情况下存储值的类型,您需要知道使用哪个时区来存储/检索它,而timestamp将始终将值作为 UTC 存储在数据库中,您可以灵活地使用哪个时区来存储或检索值。