Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL日期时区输入_Mysql_Date_Time_Formatting_Timezone - Fatal编程技术网

MySQL日期时区输入

MySQL日期时区输入,mysql,date,time,formatting,timezone,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

我对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\u contact
字段的时区3字母代码详细信息,并让MySQL接受

因此,如果我指定
SELECT*FROM friends\u 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)中,您可以对datetime(带时区)执行字符串操作,并单独提取时区,用于
插入
查询


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

例如:


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

Hi@madhur bhaiya,Hi@madhur bhaiya,是否可以使用您在代码中指定的单独列进行时间计算?也许我在最初的问题中不清楚,但我希望能够使用表中给出的日期、时间和区域信息进行时间计算,而不必手动将所有行转换为一个时区。例如,如果我想得到Bob和Sue之间的时间差,MySQL应该只使用“2018-09-06 04:23:51 BST”和“2018-09-01 11:18:21 EDT”来计算。因此MySQL需要接受我指定的字段。@SSB请检查更新的答案。如果有任何不清楚的地方,请告诉我。嗨@madhur bhaiya,谢谢你的回答。我希望我能让MySQL直接接受时区代码。如果这是指定时区的唯一方法,我将使用你的建议。@SSB我并不是说这是唯一的方法。但这是一种普遍接受的做法,也很方便。如果此答案对您有帮助,请将其标记为已接受答案(绿色勾选),也可以选择向上投票。谢谢:)
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);