我对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
答案 0 :(得分:0)
一种方法是再创建一列以分别存储时区:
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);
现在,进行计算日期时间差的操作变得更加简单,而无需担心时区差距。对于显示,您只需获取两个列,然后将其相应地更改为相关的时区即可。