使用MySQL将Unix时间戳转换为人类可读日期

Convert Unix timestamp into human readable date using MySQL

有没有mysql函数可以用来将unix时间戳转换为人类可读的日期?我有一个保存Unix时间的字段,现在我想为人类可读的日期添加另一个字段。


使用FROM_UNIXTIME()

1
2
3
4
SELECT
  FROM_UNIXTIME(timestamp)
FROM
  your_table;

另请参见:FROM_UNIXTIME()上的mysql文档。


其他答案(如本文所述)中缺少且不直接显而易见的是,from_unixtime可以采用第二个参数来指定格式,如下所示:

1
2
3
4
SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM
  your_table


我想你要找的是FROM_UNIXTIME()


在特定时区需要一个Unix时间戳?

如果您可以快速访问mysql cli,这里有一个一行程序:

1
2
3
4
5
6
7
mysql> select convert_tz(from_unixtime(1467095851), 'UTC', 'MST') as 'local time';

+---------------------+
| local time          |
+---------------------+
| 2016-06-27 23:37:31 |
+---------------------+

用你想要的时区替换'MST'。我住在亚利桑那州??因此,从UTC到MST的转换。


为什么要将字段保存为可读字段?只有我们一家

1
2
3
SELECT theTimeStamp, FROM_UNIXTIME(theTimeStamp) AS readableDate
               FROM theTable
               WHERE theTable.theField = theValue;

编辑:对不起,我们以毫秒而不是秒存储所有内容。修好了。


您可以使用日期格式功能。这是一个包含示例的页面,以及用于选择不同日期组件的模式。


由于我发现这个问题并不清楚,MySQL总是将时间存储在UTC的时间戳字段中,但会在本地时区显示(例如phpmyadmin),因此我想添加我的发现。

我有一个自动更新的"上次修改"字段,定义为:

用phpmyadmin查看,它看起来像是在本地时间,内部是UTC

1
2
SET time_zone = '+04:00'; // or '+00:00' to display dates in UTC or 'UTC' if time zones are installed.
SELECT last_modified, UNIX_TIMESTAMP(last_modified), from_unixtime(UNIX_TIMESTAMP(last_modified), '%Y-%c-%d %H:%i:%s'), CONVERT_TZ(last_modified,@@session.time_zone,'+00:00') as UTC FROM `table_name`

在任何星座中,unix时间戳和"as utc"始终以utc时间显示。

先运行两次,不设置时区。


简单易行的方法:

埃多克斯1〔6〕