MySQL
Tijd met subseconden precisie
Zoeken…
Opmerkingen
U moet MySQL versie 5.6.4 of hoger hebben om kolommen met fractionele-tweede keer datatypes te declareren.
DATETIME(3)
geeft u bijvoorbeeld een resolutie van milliseconden in uw tijdstempels en TIMESTAMP(6)
geeft u een resolutie van microseconden op een tijdstempel in * nix-stijl.
Lees dit: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
NOW(3)
geeft u de huidige tijd van het besturingssysteem van uw MySQL-server met milliseconde-precisie.
(Merk op dat MySQL interne fractionele rekenkunde, zoals * 0.001, altijd wordt behandeld als IEEE754 dubbele precisie drijvende punt, dus het is onwaarschijnlijk dat u precisie verliest voordat de zon een witte dwergster wordt.)
Krijg de huidige tijd met milliseconde-precisie
SELECT NOW(3)
doet het.
Download de huidige tijd in een vorm die eruit ziet als een Javascript-tijdstempel.
Javascript-tijdstempels zijn gebaseerd op het eerbiedwaardige gegevenstype UNIX time_t
en tonen het aantal milliseconden sinds 1970-01-01 00:00:00
UTC.
Deze uitdrukking krijgt de huidige tijd als een geheel tijdstempel van Javascript. (Het doet dit correct, ongeacht de huidige instelling voor tijdzone.)
ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)
Als u TIMESTAMP
waarden in een kolom hebt opgeslagen, kunt u deze als gehele Javascript-tijdstempels ophalen met de functie UNIX_TIMESTAMP ().
SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)
Als uw kolom DATETIME
kolommen bevat en u ze ophaalt als Javascript-tijdstempels, worden die tijdstempels gecompenseerd door de tijdzone-offset van de tijdzone waarin ze zijn opgeslagen.
Maak een tabel met kolommen om de tweede seconde op te slaan.
CREATE TABLE times (
dt DATETIME(3),
ts TIMESTAMP(3)
);
maakt een tabel met milliseconde-precisie datum- / tijdvelden.
INSERT INTO times VALUES (NOW(3), NOW(3));
voegt een rij met NOW()
waarden met milliseconde-precisie in de tabel in.
INSERT INTO times VALUES ('2015-01-01 16:34:00.123','2015-01-01 16:34:00.128');
voegt specifieke milliseconde precisiewaarden in.
Merk op dat u NOW(3)
moet gebruiken in plaats van NOW()
als u die functie gebruikt om zeer nauwkeurige tijdwaarden in te voegen.
Converteer een milliseconde-precisie datum / tijdwaarde naar tekst.
%f
is de specificatie voor fractionele precisie-indeling voor de functie DATE_FORMAT () .
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f')
geeft een waarde weer zoals 2016-11-19 09:52:53.248000
met fractionele microseconden. Omdat we NOW(3)
hebben gebruikt, zijn de laatste drie cijfers in de breuk 0.
Sla een Javascript-tijdstempel op in een TIMESTAMP-kolom
Als u een Javascript-tijdstempelwaarde heeft, bijvoorbeeld 1478960868932
, kunt u die converteren naar een MySQL-fractionele tijdwaarde zoals deze:
FROM_UNIXTIME(1478960868932 * 0.001)
Het is eenvoudig om dat soort expressie te gebruiken om uw Javascript-tijdstempel in een MySQL-tabel op te slaan. Doe dit:
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001))
(Uiteraard wilt u andere kolommen invoegen.)