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

0

Я не слишком знаком с форматами даты и времени в 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, не соответствует формату, указанному в первой строке кода, где создается таблица friends_details.

Можно ли как-то конкретно ввести 3-буквенные коды last_contact полях 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 в выводе

Теги:
date
timezone
time
formatting

1 ответ

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

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

  • 0
    Привет @ madhur-bhaiya,
  • 0
    Привет @ madhur-bhaiya, можно ли рассчитывать время, используя отдельные столбцы, которые вы указали в своем коде? Возможно, я не совсем понял в своем первоначальном вопросе, но я хотел бы иметь возможность вычислять время, используя информацию о дате, времени и зоне, приведенную в таблице, без необходимости какого-либо ручного преобразования всех строк в одну. часовой пояс. Так, например, если я хочу получить разницу во времени между Бобом и Сью, MySQL должен рассчитать это, используя только '2018-09-06 04:23:51 BST' и '2018-09-01 11:18:21 ПО ВОСТОЧНОМУ ВРЕМЕНИ ». Отсюда необходимость для MySQL принимать поля, как я указал.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню