2014-09-19 80 views
0

我有兩種不同格式的時間戳。如何獲取UTC時間和unixtimes以匹配MYSQL服務器?

一個是UTC字符串,看起來像這樣:"2014-09-19T20:55:51Z"

另一種是unix時間戳,看起來像這樣:1411159809

這兩個時間戳恰好相隔五分鐘。正如我用這個Epoch Converter工具驗證。

我想把這兩個時間戳(以及他們描述的數據)放到我的數據庫中,但是當我這樣做時,他們不同意。

表我使用的是這個樣子的:

+--------------+--------------+------+-----+---------------------+-----------------------------+ 
| Field  | Type   | Null | Key | Default    | Extra      | 
+--------------+--------------+------+-----+---------------------+-----------------------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment    | 
| property_key | int(11)  | YES |  | NULL    |        | 
| updated_at | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| created_at | timestamp | NO |  | 0000-00-00 00:00:00 |        | 
| value  | varchar(128) | YES |  | NULL    |        | 
| name   | varchar(128) | YES |  | NULL    |        | 
+--------------+--------------+------+-----+---------------------+-----------------------------+ 

至於查詢,我有:

insert into events (value,property_key,created_at) values ('datapoints/56892923',273827,'2014-09-19T20:55:51Z')

insert into events (value,name,created_at) values ('240','HeartRate',FROM_UNIXTIME(1411159809))

當我扯這些條目退出數據庫,這個我是我得到:

*************************** 1. row *************************** 
      id: 1 
property_key: 273827 
    updated_at: 2014-09-19 17:42:44 
    created_at: 2014-09-19 20:55:51 
     value: datapoints/56892923 
     name: NULL 
*************************** 2. row *************************** 
      id: 2 
property_key: NULL 
    updated_at: 2014-09-19 17:43:09 
    created_at: 2014-09-19 14:50:09 
     value: 240 
     name: HeartRate 
2 rows in set (0.00 sec) 

updated_at成爲創建行的時間戳,符合市場預期。令我困擾的是created_at與六個小時不同。我猜MYSQL將當地時間解釋爲UTC,但那不是我想要的。我如何獲得這些時間戳以表達我想要的方式?

+0

請編輯您的帖子幷包含'events'的表定義(即整個CREATE TABLE語句) – 2014-09-20 00:27:37

回答

0

閱讀手冊FROM_UNIXTIME()

返回UNIX_TIMESTAMP參數的表示如在值 'YYYY-MM-DD HH:MM:SS' YYYYMMDDHHMMSS.uuuuuu格式或,這取決於是否在功能用於字符串或數字上下文中。 該值在當前時區中表示。

同樣對於TIMESTAMP數據類型的定義:

的MySQL從當前時區轉換時間標記值UTC用於存儲,並返回從UTC到用於獲取當前時區。

所以,如果你正在使用TIMESTAMP列你應該確定,你所要做的就是用TZ_CONVERT確保時間戳被格式化爲UTC。

+0

好的,如果我理解正確,那麼TIMESTAMP預計它的輸入在當前時區。所以,我需要將我的UTC時間戳字符串翻譯成當前時區,然後再存儲它。看起來我可以用'CONVERT_TZ('2014-09-19T20:55:51Z','GMT','SYSTEM')來做到這一點' – Luke 2014-09-23 20:11:37

相關問題