因此,我有一个整数'63605914755',如下所示:
SELECT TO_SECONDS( '2015-08-04 13:40:56' ) ----- Result: '63605914755'
如何将“63605914755”从秒转换回日期时间(例如:'2015年8月4日13:40:56')?
p1iqtdky1#
SELECT from_unixtime(seconds - to_seconds('1970-01-01 00:00:00')) as my_date_time FROM your_table
这是一个SQLFiddle
k4emjkb12#
另一种方法是简单地将秒数加回0000-01-00的基准日期,但是,使用0000-01-00将导致NULL,因此我们必须指定0000-01-01月份的第一天。这会导致日期偏离1天。为了说明这一点,我们只需从结果日期中减去1天:
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函数,请用途:一个二个一个一个
FROM_SECONDS
DATETIME
DETERMINISTIC
由于Unix纪元的日期是基于UTC的,当MySQL服务器使用带有偏移量的时区时,使用FROM_UNIXTIME(seconds - seconds_from_epoch),得到的日期时间将偏移该偏移量。对于EST,使用FROM_UNIXTIME将导致2015-08-04 09:40:56。要解决此问题,您需要计算UTC_TIMESTAMP和CURRENT_TIME之间的分钟差,并从FROM_UNIXTIME中减去生成的分钟偏移量。如果您的服务器使用UTC,则此操作无效,因为生成的偏移量将为0。
FROM_UNIXTIME(seconds - seconds_from_epoch)
FROM_UNIXTIME
2015-08-04 09:40:56
UTC_TIMESTAMP
CURRENT_TIME
UTC
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;
2条答案
按热度按时间p1iqtdky1#
这是一个SQLFiddle
k4emjkb12#
另一种方法是简单地将秒数加回
0000-01-00
的基准日期,但是,使用0000-01-00
将导致NULL
,因此我们必须指定0000-01-01
月份的第一天。这会导致日期偏离1天。为了说明这一点,我们只需从结果日期中减去1天:
示例:https://dbfiddle.uk/YNJ7Q856
结果:
要创建
FROM_SECONDS
函数,请用途:一个二个一个一个
DATETIME
值是时间点引用(静态),因此上述查询可以是DETERMINISTIC
,因为所提供秒的结果值始终相同。*注:
由于Unix纪元的日期是基于UTC的,当MySQL服务器使用带有偏移量的时区时,使用
FROM_UNIXTIME(seconds - seconds_from_epoch)
,得到的日期时间将偏移该偏移量。对于EST,使用
FROM_UNIXTIME
将导致2015-08-04 09:40:56
。要解决此问题,您需要计算
UTC_TIMESTAMP
和CURRENT_TIME
之间的分钟差,并从FROM_UNIXTIME
中减去生成的分钟偏移量。如果您的服务器使用UTC
,则此操作无效,因为生成的偏移量将为0。结果: