2017-04-12 180 views
1

我已经更新了一列,声明为updated TIMESTAMP,并且是唯一的TIMESTAMP类型列。从时间戳获取本地时间

当我做select updated from pushinfo;

我得到

+---------------------+ 
| updated    | 
+---------------------+ 
| 2017-04-11 15:33:46 | 
| 2017-04-11 15:35:02 | 
| 2017-04-12 10:15:54 | 
+---------------------+ 

当我使用select FROM_UNIXTIME(updated) from pushinfo;

我越来越

| FROM_UNIXTIME(updated) | 
+------------------------+ 
| NULL     | 
| NULL     | 
| NULL     | 

为什么不FROM_UNIXTIME工作?

当我使用这个查询

conn.query(' select updated from pushinfo') 

我得到了更新,像YYYY-MM-DDTHH:MM:SS.000Z 什么问题?

如何获取HH:MM:SS YYYY-MM-DD等格式?

回答

1

FROM_UNIXTIME需要一个Unix时间戳参数(即一个整数,它是从Unix Epoch开始的秒数)。你必须使用DATE_FORMAT()。这是因为即使列被定义为TIMESTAMP,MySQL也会将该值作为日期返回而不是时间戳。这是MySQL的TIMESTAMP类型列的默认行为。要获得实际的时间戳值,您必须使用UNIX_TIMESTAMP()

所以,你的查询会是这样

conn.query(' select DATE_FORMAT(updated, "%H:%i:%s %Y-%m-%d") from pushinfo') 

时只选择updated列你得到什么是你的MySQL服务器的默认日期格式列的值。

问题的标题与其余部分无关。你永远不会从Unix时间戳中获得本地时间,因为它始终处于祖鲁时间(即UTC)。