2017-04-12 177 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)。