MySQL
Время с точностью до секунды
Поиск…
замечания
Вы должны быть в MySQL версии 5.6.4 или новее, чтобы объявлять столбцы с дробно-временными типами данных.
Например, DATETIME(3)
даст вам миллисекундное разрешение на ваших временных отметках, а TIMESTAMP(6)
предоставит вам разрешение по микросекундам на отметке времени в стиле nix.
Прочтите это: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
NOW(3)
предоставит вам текущее время с вашей операционной системы сервера MySQL с точностью до миллисекунды.
(Обратите внимание, что внутренняя дробная арифметика MySQL, такая как * 0.001, всегда обрабатывается как плавающая точка с двойной точностью IEEE754, поэтому маловероятно, что вы потеряете точность до того, как Солнце станет звездой белого карлика.)
Получить текущее время с точностью до миллисекунды
SELECT NOW(3)
делает трюк.
Получить текущее время в форме, которая похожа на метку времени Javascript.
Временные метки Javascript основаны на почтенном типе данных UNIX time_t
и показывают количество миллисекунд с 1970-01-01 00:00:00
UTC.
Это выражение получает текущее время как целое число timestamp Javascript. (Он делает это правильно, независимо от текущей настройки time_zone).
ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)
Если у вас есть значения TIMESTAMP
хранящиеся в столбце, вы можете получить их как целочисленные временные метки Javascript, используя функцию UNIX_TIMESTAMP ().
SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)
Если ваш столбец содержит столбцы DATETIME
и вы извлекаете их как отметки времени Javascript, эти временные метки будут компенсированы смещением часового пояса временного пояса, в котором они хранятся.
Создайте таблицу со столбцами для хранения суб-второго времени.
CREATE TABLE times (
dt DATETIME(3),
ts TIMESTAMP(3)
);
создает таблицу с полями даты / времени с точностью до миллисекунд.
INSERT INTO times VALUES (NOW(3), NOW(3));
вставляет строку, содержащую значения NOW()
с точностью до миллисекунды в таблицу.
INSERT INTO times VALUES ('2015-01-01 16:34:00.123','2015-01-01 16:34:00.128');
вставляет конкретные значения точности миллисекунды.
Обратите внимание, что вы должны использовать NOW(3)
а не NOW()
если вы используете эту функцию для вставки высокоточных значений времени.
Преобразование значения даты / времени с точностью до миллисекунды в текст.
%f
- спецификатор формата дробной точности для функции DATE_FORMAT () .
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f')
отображает значение типа 2016-11-19 09:52:53.248000
с дробными микросекундами. Поскольку мы использовали NOW(3)
, последние три цифры во фракции равны 0.
Храните метку времени Javascript в столбце TIMESTAMP
Если у вас есть значение временной метки Javascript, например 1478960868932
, вы можете преобразовать это значение в значение дробного времени MySQL следующим образом:
FROM_UNIXTIME(1478960868932 * 0.001)
Это простое выражение для хранения вашей метки времени Javascript в таблице MySQL. Сделай это:
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001))
(Очевидно, вы захотите вставить другие столбцы.)