MySQL 日期时区输入

标签 mysql date time formatting timezone

我对 MySQL 中的日期和时间格式不太熟悉,我尝试在 stackoverflow 上查找解决方案,但找不到任何专门回答我的查询的内容...

我有以下 MySQL 代码:

CREATE TABLE friends_details (name VARCHAR(255), last_contact DATETIME);

INSERT INTO friends_details VALUES
('Bob', '2018-09-06 04:23:51 BST');

INSERT INTO friends_details VALUES
('Eszter', '2018-01-21 17:24:06 CET');

INSERT INTO friends_details VALUES
('Sue', '2018-09-01 11:18:21 EDT');

INSERT INTO friends_details VALUES
('Jack', '2018-02-27 23:11:47 UTC');

我失败了,因为我尝试输入到 last_contact 字段的值的格式与表 friends_details< 的第一行代码中指定的格式不匹配/strong> 已创建。

有什么方法可以专门输入 last_contact 的时区 3 字母代码详细信息吗?字段,并让 MySQL 接受它们?

所以如果我指定SELECT * FROM friends_details;稍后,我希望能够得到以下输出:

Bob,    2018-09-06 04:23:51 BST
Eszter, 2018-01-21 17:24:06 CET
Sue,    2018-09-01 11:18:21 EDT
Jack,   2018-02-27 23:11:47 UTC

我不想在输出中将任何时间转换为 UTC

最佳答案

一种方法是再创建一列来单独存储时区:

CREATE TABLE friends_details (name VARCHAR(255), 
                              last_contact DATETIME, 
                              timezone VARCHAR(3));

INSERT INTO friends_details VALUES
('Bob', '2018-09-06 04:23:51', 'BST');

INSERT INTO friends_details VALUES
('Eszter', '2018-01-21 17:24:06', 'CET');

INSERT INTO friends_details VALUES
('Sue', '2018-09-01 11:18:21', 'EDT');

INSERT INTO friends_details VALUES
('Jack', '2018-02-27 23:11:47', 'UTC');

注意,在您的应用程序代码(例如:PHP)中,您可以对日期时间(带时区)进行字符串操作并单独提取时区,以用于 Insert 查询.

<小时/>

但是,一般做法是以 UTC 形式存储时间,并在第二列中存储实际时区与 UTC 的差距(以小时为单位)。

例如:

CREATE TABLE friends_details (name VARCHAR(255), 
                              last_contact_utc DATETIME, 
                              timezone_gap decimal(5,2));

-- CET is UTC + 1, so the time in UTC will be CET - 1
INSERT INTO friends_details VALUES
('Eszter', '2018-01-21 16:24:06', 1);

-- EDT is UTC - 4, so the time in UTC will be EDT + 4
INSERT INTO friends_details VALUES
('Sue', '2018-09-01 15:18:21', -4);

INSERT INTO friends_details VALUES
('Jack', '2018-02-27 23:11:47', 0);

现在,计算日期时间差异的操作变得更加简单,无需担心时区差距。为了显示,您可以简单地获取这两列,并将其相应地更改为相关时区。

关于MySQL 日期时区输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175979/

相关文章:

r - 为什么使用ifelse后还要重新设置as.Date origin?有没有更好的办法?

php - MySql查询错误(二)

c++ - while 循环中的 MySQL Connector/C++ 错误

Pandas - 将具有开始和结束日期的数据帧转换为每日数据

algorithm - 如何将时间戳(从 0 开始的纳秒)转换为 Y :D:H:M:S:m:n?

python - Tkinter 上的 time.sleep() 等效项

php - 在 php/mysql 中将日期时间数据类型转换为日期和时间数据类型

php - 本地Drupal站点安装失败

mysql - 如何计算 MYSQL 中具有重复值的行数,同时考虑 REGEXP 或通配符?

swift - 从当前日期减去一定天数并以特定日期格式打印