mysql日期时区输入

1dkrff03  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(654)

我对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');

我失败了,因为我试图输入到最后一个联系人字段的值的格式与创建表friends\u details的第一行代码中指定的格式不匹配。
有没有办法我可以特别输入的时区3字母代码的详细资料 last_contact 字段,并让它们被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

qltillow

qltillow1#

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

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)中,可以对datetime(带时区)执行字符串操作,并分别提取时区 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);

现在,计算日期时间差的操作变得更简单,而不用担心时区差。对于display,您只需获取两个列,并相应地将其更改为相关时区。

相关问题