2014-12-04 116 views
1

當前日期時間我存儲在註冊時,用戶作爲DATETIME的,如下面看到存儲在數據庫

+-----+--------------------+ 
| id |  Join_Date  | 
+-----+--------------------+ 
| 1 | 2014-12-5 03:21:46 | 
+-----+--------------------+ 
| 2 | 2014-12-3 03:21:46 | 
+-----+--------------------+ 

它使國家之間的差異最好的財產?

我們也許說,在中國的本地時間凌晨3點是使數據庫存儲日期時間爲凌晨3點,而在印度當地時間凌晨5點是使數據庫存儲日期時間爲上午05點。這個邏輯是否正確?如果是,這不是我想要的。我想要的是將日期時間存儲在相同的時間戳中。我怎樣才能做到這一點?

+0

MySQL已經沒有時區的概念,也不應該。您需要存儲特定日期/時間的時區。無論您選擇哪個時區,都不會得到不同的時間。 – 2014-12-04 20:20:35

+0

您的應用程序邏輯依賴於此。如果這個問題被標記爲PHP,我會推薦使用'DateTime'對象[可以爲您處理時區](http://php.net/manual/en/datetime.settimezone.php),並提出一個通用區域,或者使用使用UTC的UNIX時間戳。 – sjagr 2014-12-04 20:22:32

+0

@sjagr在服務器端使用PHP Im = D – user3651999 2014-12-04 20:24:25

回答

0

很少需要使用服務器以外的語言環境來存儲日期時間信息。大多數情況下,日期時間事件是由服務器計算的,所以除非您存儲用戶提供的值(例如出生日期),否則應該將其存儲爲UTC。

而且,即使與大多數用戶提供的日期時間值(安排約會,例如)你必須將其存儲在數據庫之前正常化該值UTC。這樣的日期將保持一致,即使用戶時區的變化(在旅途中,例如,或者當夏令時是有效的。)

0

存儲它作爲DATETIME數據類型是要使用的最佳數據類型。但是您應該將日期存儲爲UTC日期,然後將其轉換爲您需要的時區。

這樣,時間在不同時區之間是一致的。否則,您可以將它們存儲在數據庫中的全部時間(包括時區)中。例如,在MS Sql Server中,您可以使用datetimeoffset

+0

如果我們真的想討論什麼是最好的給定的參數 - 唯一的理智的選擇是'timestamp'數據類型,而不是'datetime'。 – 2014-12-04 22:01:46