Есть ли способ получить миллисекунды из метки времени в MySql
или PostgreSql
(или другие просто из любопытства)?
SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572
Есть что-то вроде этого:
SELECT CURRENT_MILLISEC
--> 1331255526000
или единственная альтернатива — использовать DATEDIFF
из эры
?
Для всех здесь, просто послушайте / читает комментарии очень хороший Doin! Эти UNIX_TIMESTAMP()
функция, когда datatime-строка будет дана, свяжется локальный время, на основе часового пояса Подключения mysql или сервера, к метке времени Unix. Когда в другом часовом поясе и контакте с переходом на летнее время, один час в год, это пойдет не так, как надо!
, Например, в Нидерландах, в прошлое воскресенье октября, спустя секунду после достигающего 2:59:59 впервые, время будет задержано к 2:00:00 снова. Когда использование NOW()
, CURTIME()
или SYSDATE()
- функционируют от MySQL и передача его к эти UNIX_TIMESTAMP()
функция, метки времени будут неправильными при целом наш.
, Например, на Satudray 27-го октября 2018, время и метки времени прошли как это:
Local time | UTC Time | Timestamp | Timestamp using MYSQL's UNIX_TIMESTAMP(NOW(4))
----------------------------------+---------------------------+--------------+-----------------------------------------------------
2018-10-27 01:59:59 CET (+02:00) | 2018-10-26 23:59:59 UTC | 1540598399 | 1540598399
2018-10-27 02:00:00 CET (+02:00) | 2018-10-27 00:00:00 UTC | 1540598400 | 1540598400 + 1 second
2018-10-27 02:59:59 CET (+02:00) | 2018-10-27 00:59:59 UTC | 1540601999 | 1540601999
2018-10-27 03:00:00 CET (+02:00) | 2018-10-27 01:00:00 UTC | 1540602000 | 1540602000 + 1 second
2018-10-27 03:59:59 CET (+02:00) | 2018-10-27 01:59:59 UTC | 1540605599 | 1540605599
2018-10-27 04:00:00 CET (+02:00) | 2018-10-27 02:00:00 UTC | 1540605600 | 1540605600 + 1 second
, Но в воскресенье 27-го октября 2019, когда мы скорректировали часы один час. Поскольку местное время, doensn't включают информацию, является ли это +02:00 или +01:00, преобразовывая 2:00:00 времени в первый раз и во второй раз, когда оба дают ту же метку времени (со второго 2:00:00) при использовании функции MySQL UNIX_TIMESTAMP(NOW(4))
. Так, при проверке меток времени в базу данных это сделало это: +1 +1 +3601 +1 +1... +1 +1 - 3599 +1 +1 и т.д.
Local time | UTC Time | Timestamp | Timestamp using MYSQL's UNIX_TIMESTAMP(NOW(4))
----------------------------------+---------------------------+--------------+-----------------------------------------------------
2019-10-27 01:59:59 CET (+02:00) | 2019-10-26 23:59:59 UTC | 1572134399 | 1572134399
2019-10-27 02:00:00 CET (+02:00) | 2019-10-27 00:00:00 UTC | 1572134400 | 1572138000 + 3601 seconds
2019-10-27 02:59:59 CET (+02:00) | 2019-10-27 00:59:59 UTC | 1572137999 | 1572141599
2019-10-27 02:00:00 CET (+01:00) | 2019-10-27 01:00:00 UTC | 1572138000 | 1572138000 - 3599 seconds
2019-10-27 02:59:59 CET (+01:00) | 2019-10-27 01:59:59 UTC | 1572141599 | 1572141599
2019-10-27 03:00:00 CET (+01:00) | 2019-10-27 02:00:00 UTC | 1572141600 | 1572141600 + 1 second
Передача на UNIX_TIMESTAMP () - функционирует от MySQL, когда преобразование местного времени, к сожалению, очень ненадежно! Вместо того, чтобы использовать SELECT UNIX_TIMESTAMP(NOW(4))
, мы теперь используем код ниже, который швы решить проблему.
SELECT ROUND(UNIX_TIMESTAMP() + (MICROSECOND(UTC_TIME(6))*0.000001), 4)