如何在MySQL中将时间戳转换为日期时间?

164
如何在MySQL中将1300464000转换为2011-03-18 16:00:00

2
在发布新问题之前,请搜索现有的问题/答案 - 这个主题已经被详细讨论过了。 - John Parker
2
你看了文档吗?这里面都有:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html - Felix Kling
5个回答

235

在 MySQL 中使用 FROM_UNIXTIME() 函数

请记住,如果您正在使用以毫秒为单位存储的框架(例如 Java 的时间戳),则必须除以 1000才能获得正确的 Unix 时间(以秒为单位)。


1
为什么在v5.6中使用SELECT from_unixtime( TIMESTAMP( "2011-12-01", "22:01:23.048" ) )无法工作? - Janus Troelsen
4
@JanusTroelsen SELECT from_unixtime( unix_timestamp(TIMESTAMP( "2011-12-01", "22:01:23.048" ) ) ) 可以使用。TIMESTAMP() 不会返回整数值。 - cnvzmxcvmcx
4
由于MySQL将Unix时间以秒为单位存储,而许多其他框架将其以毫秒为单位存储(例如Java的时间戳),因此如果您在使用来自使用毫秒表示Unix时间的数据源的数据时使用此函数,请记得除以1000。请注意对输出进行细致的检查,以免混淆。 - Chris Thompson

81
DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%Y-%m-%d %H:%i:%s') as "Date" FROM `orders`

如果给定的日期是编码格式,例如1300464000,那么这是最终解决方案。


4
感谢您。为了包含时间:DATE_FORMAT(FROM_UNIXTIME(\orderdate`), '%d-%m-%Y %H:%i:%s') as "Date" FROM `orders` `意思是将 Unix 时间戳 orderdate 转换成日期格式,并将其以特定的形式显示在查询结果中,格式为 dd-mm-yyyy hh:mm:ss,并将该列命名为 "Date"。此查询语句适用于订单表格中的数据。 - JNP Web Developer
1
我非常确定使用DATE_FORMAT(FROM_UNIXTIME(orderdate), '%Y-%m-%d')作为"日期"从orders中查询将是最终解决方案:D - Kyle

17

回答Janus Troelsen的评论

使用UNIX_TIMESTAMP代替TIMESTAMP

SELECT from_unixtime( UNIX_TIMESTAMP(  "2011-12-01 22:01:23.048" ) )

TIMESTAMP函数返回日期或日期时间,而不是时间戳。而UNIX_TIMESTAMP返回Unix时间戳。


似乎可以比较Unix时间戳。我使用SELECT (CAST(DATE_FORMAT(from_unixtime(UNIX_TIMESTAMP(CURRENT_TIMESTAMP)), '%Y-%m-%d') as DATE) < CAST('2019-05-02' AS DATE)) ;来比较日期,我在PHP中将2019-05-02替换为格式化的日期时间对象。谢谢。 - Mantisse
1
请不要对与原问题不同的问题作出此类回答。 - Paweł Stankowski
这完全没有回答原问题。 - Nico Haase

12

您可以使用

select from_unixtime(1300464000,"%Y-%m-%d %h %i %s") from table;

总的来说,有两种相关的方法:
1. from_unixtime() 2. unix_timestamp()

我会使用这个格式来表示军事时间 "%Y-%m-%d %H %i %s"。 - tanner burton
1
正如 @tannerburton 所说,它是 H 而不是 OP 想要的 h,表示24小时制时间格式。 - Kevin

4

SELECT from_unixtime(UNIX_TIMESTAMP(field_with_timestamp)) FROM "your_table"
这对我有用。

说明:该代码是一个SQL查询语句,将Unix时间戳转换为可读日期格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接