2013-01-09 58 views
0

我嘗試以UTC格式存儲我的日期值到我的SQL Server數據庫,然後將它們轉換爲本地時間顯示,似乎工作正常,我可以看到我的DB日期值存儲是不同的(我認爲它已被轉換爲UTC),檢索它並顯示也是準確的,直到我嘗試通過在日期和時間選項(任務欄中Windows時間設置的右下角)中更改它來測試不同的時區以便「遷移「我自己。顯然,日期仍然保留,因爲我在我的國家,即使我改變的時區有3小時的差異。asp.net +測試時區

可以以某種方式請建議的方式來測試不同時區的日期顯示?

謝謝。

存儲日期值到SQL Server:

DateTime dateFrom = DateTime.Parse(startDateTime).ToUniversalTime(); 
DateTime dateTo = DateTime.Parse(endDateTime).ToUniversalTime(); 
parameters.Add(new SqlParameter("@StartDateTime", dateFrom)); 
parameters.Add(new SqlParameter("@EndDateTime", dateTo)); 

Retrive從DB和顯示:

DateTime date = DateTime.UtcNow.ToLocalTime(); 
date = DateTime.Parse(dr["StartDateTime"].ToString()).ToLocalTime(); 
         litDateTimeFrom.Text = date.ToString("dd MMM yy hh:mm tt"); 
date = DateTime.Parse(dr["EndDateTime"].ToString()).ToLocalTime(); 
         litDateTimeTo.Text = date.ToString("dd MMM yy hh:mm tt"); 

回答

0

第一件事,我假設你已經改變了服務器上的時區信息(因爲這就是將在ToLocalTime方法中使用的方法)。如果沒有,那麼這就是你首先需要做的測試。

其次,您是否嘗試在更改系統時區後重新啓動IIS(或您的Web應用程序)?這是必要的,因爲時區信息可能已被緩存在.NET框架中(在TimeZoneInfo類中)。

說了這麼多,對我來說,這沒有任何意義。通常,時區信息需要從用戶(客戶端)機器傳輸,因爲您想顯示用戶本地時間(與他的時區相關)。因此,這意味着您需要根據a)瀏覽器的文化信息或b)存儲在他的個人資料數據(可能是國家或實際時區)中的內容來確定當前用戶的時區。c)類似的方案。一旦用戶時區已知,您可以使用 TimeZoneInfo類將UTC時間轉換爲相應的本地時間。

+0

我實際上是遵循這個例子:http://www.4guysfromrolla.com/articles/081507-1.aspx我很困惑,因爲我認爲我可以使用.tolocaltime方法將utc轉換爲本地時間,而無需takecare抵消 – k80sg

+0

好的,清除瀏覽器緩存解決了這個問題。 – k80sg

+0

@ user415795,真的沒有混淆。如果你仔細閱讀你看過的文章,作者也會這樣說。他使用'DateTime.ToLocalTime'來轉換爲**服務器時間** - 確切的引用是*「給定UTC的時間,.NET Framework可以很容易地將其轉換爲服務器時間,只需使用DateTime類的ToLocalTime( ) 方法」*。服務器時間與用戶當地時間不一致 - 您可以在不同時區有兩個用戶,第三個服務器可以有三個不同的本地時間。 – VinayC