2014-05-09 158 views
0

我喜歡將當前用戶的當前DateTime.Now保存爲UTC。對於任何用戶而言,時間是相對於彼此的?我使用此代碼片段來實現實體框架的UTC: Entity Framework DateTime and UTCASP.NET MVC處理時區實體框架

查看數據庫後,日期的列未發生更改。

09.05.2014 20:21:24 

我需要在客戶端顯示相對於每個用戶的日期。所以當用戶在美國創建他的賬戶時14:00我喜歡在歐洲看到20:00

+1

獲取DateTime列值,然後執行'.ToLocal()' –

+0

您的意思是在客戶端? –

+2

是的,在設置爲本地時間的環境中。如果它是可變的,那麼你需要手動將它轉換到特定的時區。重要的是以UTC保存DateTime。 –

回答

1

首先您需要使用DateTime.UtcNow而不是DateTime.Now。英孚將保存日期,它不會做任何事情。

對於數據庫,它只是一個日期,無論是UTC還是特定時區,數據庫都不知道。只有當我們從數據庫中檢索日期時,在顯示給本地用戶之前,我們應該調用ToLocalTime或客戶端UI庫中的類似方法將UTC轉換爲本地時間。 ToLocalTime假定輸入實際上是UTC。

如果您從客戶端保存日期,例如在JavaScript中使用AJAX post,JavaScript日期應該被序列化爲UTC。

請記住,服務器不知道您發送日期的位置,服務器無法將任何日期轉換爲UTC,另一方面,客戶端已完全瞭解設置了哪個國家和哪個時區,並且可以輕鬆地將本地時間轉換爲世界標準時間。

1

在DateTime對象上調用.ToLocalTime()會將其轉換爲當地時間。您應該始終將日期保存爲UTC,然後在顯示時進行轉換。

+0

爲什麼我看到字符串像數據庫中的09.05.2014 20:21:24。它已經是UTC了嗎?我不這麼認爲。所以DateTimeKind屬性不工作。 –

+0

你是如何設置DateTime的? '.ToUniversalTime()' –