我在UNIX中将unix时间戳转换为Datetime格式。但它显示NULL作为输出

时间:2017-07-12 07:02:01

标签: mysql

select FROM_UNIXTIME(32154654321);

输出:空

预期成果:格林威治标准时间12月9日星期二,下午2时55分1:55:21 GMT + 05:30

3 个答案:

答案 0 :(得分:2)

这是Year-2038 problemTIMESTAMP数据类型的最大值为2038-01-19 03:14:07,因此无法获得预期结果。

  

MySQL 5.5: TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。   来源: https://dev.mysql.com/doc/refman/5.5/en/datetime.html

     

MySQL 5.6 +: [...]和TIMESTAMP值的范围是'1970-01-01 00:00:01.000000'到'2038-01-19 03 :14:07.999999'
。   来源: https://dev.mysql.com/doc/refman/5.7/en/datetime.html

您可以找到一个非常good answer on stackoverflow,其中包含有关此问题的更多详细信息。

您可以使用PHP而不是MySQL将时间戳(未存储在TIMESTAMP列中)转换为可读的日期时间,使用以下代码:

$timestamp = 32154654321;
$format = 'Y-m-d H:i:s';
$date = new DateTime();
$date->setTimestamp($timestamp);
echo $date->format($format);
  

演示: http://ideone.com/DsYUOQ

答案 1 :(得分:2)

这就是原因:https://dev.mysql.com/doc/refman/5.5/en/datetime.html

  

TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。

答案 2 :(得分:0)

您无法输入如32154654321

  

mysql中的时间戳最大值为2147483647,相当于   到2038-01-19 05:14:07这是由于底层的32位   局限性。将导致在此之外的时间戳上使用该函数   返回NULL。如果需要,请使用DATETIME作为存储类型   超出此范围的日期。