CURRENT_TIMESTAMP в миллисекундах

Есть ли способ получить миллисекунды из метки времени в MySql или PostgreSql (или другие просто из любопытства)?

SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572

Есть что-то вроде этого:

SELECT CURRENT_MILLISEC
--> 1331255526000

или единственная альтернатива — использовать DATEDIFF из эры?

60
задан Marsellus Wallace 8 March 2012 в 20:19
поделиться

1 ответ

Для всех здесь, просто послушайте / читает комментарии очень хороший 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)
0
ответ дан 24 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: