MySQL дата-часовой ввод - PullRequest
       12

MySQL дата-часовой ввод

0 голосов
/ 06 ноября 2018

Я не слишком знаком с форматами даты и времени в MySQL, и я попытался найти решения для стека в стеке, но не могу найти ничего, что конкретно отвечает на мой запрос ...

У меня есть следующий код 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 и получить их от 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 на выходе

1 Ответ

0 голосов
/ 06 ноября 2018

Один из способов - создать еще один столбец для хранения часового пояса отдельно:

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);

Теперь выполнение операций для вычисления разницы между датой и временем стало проще, не беспокоясь о разрыве (-ах) часового пояса. Для отображения вы можете просто получить оба столбца и соответственно изменить его на соответствующий часовой пояс.

...