我有一个整数'63605914755',如下所示:
SELECT TO_SECONDS( '2015-08-04 13:40:56' )
-----
Result: '63605914755'
如何将“63605914755”从秒转换回日期时间(例如:“2015-08-04 13:40:56”)?
我有一个整数'63605914755',如下所示:
SELECT TO_SECONDS( '2015-08-04 13:40:56' )
-----
Result: '63605914755'
如何将“63605914755”从秒转换回日期时间(例如:“2015-08-04 13:40:56”)?
0000-01-00
基准日期。然而,使用0000-01-00
会导致NULL
,因此我们必须指定月份的第一天0000-01-01
。SELECT '0000-01-01' + INTERVAL TO_SECONDS('2015-08-04 13:40:56') SECOND - INTERVAL 1 DAY;
结果:
2015-08-04 13:40:56
FROM_SECONDS
函数,使用以下代码:DELIMITER //
CREATE FUNCTION `FROM_SECONDS`(
`secs` BIGINT
)
RETURNS DATETIME
DETERMINISTIC
NO SQL
SQL SECURITY INVOKER
BEGIN
RETURN '0000-01-01' + INTERVAL secs SECOND - INTERVAL 1 DAY;
END//
SELECT FROM_SECONDS(TO_SECONDS('2015-08-04 13:40:46'));
DATETIME
值是时间参考点(静态),所以上述查询可以是 DETERMINISTIC
的,因为提供的秒数的结果值始终相同。
注意:
由于Unix纪元日期基于UTC,当您的MySQL服务器使用具有偏移量的时区时,使用FROM_UNIXTIME(秒-纪元秒)
,所得到的日期时间将会偏移该偏移量。MySQL使用的默认时区是“SYSTEM”时区。
对于美国东部标准时间(EST),使用FROM_UNIXTIME
将得到2015-08-04 09:40:56
。
为解决此问题,您需要计算UTC_TIMESTAMP
和CURRENT_TIME
之间的分钟差异,并从FROM_UNIXTIME
中减去结果分钟偏移量。如果您的服务器使用UTC
,则这将不会产生影响,因为结果偏移量为0。
SELECT FROM_UNIXTIME(TO_SECONDS('2015-08-04 13:40:56') - TO_SECONDS('1970-01-01 00:00:00')) - INTERVAL TIMESTAMPDIFF(MINUTE, UTC_TIMESTAMP(), NOW()) MINUTE;
结果:
2015-08-04 13:40:56