【问题标题】:MYSQL - how to store date and time as UTC rather than EST?MYSQL - 如何将日期和时间存储为 UTC 而不是 EST?
【发布时间】:2021-09-28 17:24:47
【问题描述】:

在我的应用程序中,我有以下 2 列:

start - datetime
end - datetime

对应的java字段:

@JsonProperty
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "start")
private Calendar start;

@JsonProperty
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "end")
private Calendar end;

每当前端调用后端来持久化一个实体时,它总是保存为EST时间。

例如如果时间以12pm 发送,则在数据库中保存为8am.

如何确保保存在数据库中的时间始终在UTC

我尝试将start 列的类型更改为timestamp,但这并没有解决。

【问题讨论】:

  • Calendar?真的吗?
  • 使用java.time.OffsetDateTime(或者java.time.ZonedDateTime)代替java.util.Calendar。哦,检查 (1) 您的系统和 (2) 数据库的时区。
  • 所以我应该同时更改日历>Java 中的ZonedDatetime 和日期时间>mysql 中的时间戳

标签: java mysql datetime timestamp


【解决方案1】:

TIMESTAMP 数据类型在 MySql 中以 UTC 格式存储。 (DATETIME 数据类型不是。)

当您存储它们时,它们会从连接或服务器的时区设置转换为 UTC。而且,当您检索它们时,它们会被翻译回来。

要完成这项工作,您需要确保每个连接上的时区设置都是正确的。如果您在打开连接时或在处理任何 TIMESTAMP 数据之前这样做,这样的事情就可以解决问题。

SET time_zone = 'America/Halifax';

全球网络应用程序(例如 WordPress)具有用户偏好设置的时区,因此每个用户都可以查看自己本地时间的时间。

如果要检索 UTC 时间,请先执行此操作:

SET time_zone = 'UTC';

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 2010-11-23
    • 2020-03-07
    • 2013-08-10
    • 2014-02-03
    • 2014-12-18
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多