有沒有辦法在ASP.NET中定義應用程序的時區,以便所有讀取/比較當前服務器時間的時間都被隱式轉換,或者是否需要將轉換語句放入每個DateTime.Now調用?有沒有辦法在ASP.NET中定義應用程序的時區?
回答
我不知道有關ASP的最新演變,但這article from 2006提供了一個有趣的答案:
的問題是,時區信息不直接可通過Web瀏覽器。您可以使用啓發式方法確定正確的時區,或者您必須根據用戶的選擇爲用戶存儲時區設置。
接下來可能無法與.net 3.5及其TimeZoneInfo..ConvertTime方法需要,不過,出於完整性的緣故:
一旦你有,你現在需要的時間翻譯時區設置。 您應該始終使用UTC將日期/時間值存儲在數據庫中。這消除了許多轉換問題。如果以UTC格式存儲信息,那麼只需將UTC顯示到用戶的本地時區,然後將數據顯示給它們時,如果從中獲取日期/時間值,則需要將時區轉換爲UTC。
是什麼使這更困難的是,TimeZone類是不是所有的有用。幸運的是,在v2.0中,DateTime更新爲支持時間是否爲UTC的指標。 您可以使用DateTime.ToUniversalTime方法將DateTime轉換爲UTC。不幸的是,您不能將其轉換回。
的ToLocalTime方法使用,在服務器上運行,使用服務器的時區,這是不是你想要的本地時區。但更糟糕的是,您不能簡單地創建TimeZone對象並使用它,因爲該支持不存在。
邁克爾·布拉姆爲了能夠輕鬆地創建和使用時區創造了一個很好的little class。我個人在我自己的應用程序中使用了該代碼的重大修改版本,並且效果很好。以下是將DB UTC值轉換爲本地用戶時區的步驟。
1)獲取用戶
2)創建的SimpleTimeZone類來包裝它(使用一個DB值映射到底層的Windows註冊表版本的一些映射方案)
3的存儲區值)使用SimpleTimeZone.ToLocalTime方法將DateTime值轉換爲本地時間。
出於性能方面的考慮,您或許應該得到和初始化的SimpleTimeZone實例,並將它緩存在項目屬性爲請求的長度,這樣你就不必不斷創建它。
從用戶的本地時區轉換爲UTC做相反:
1)從用戶
2獲取存儲區值)創建的SimpleTimeZone類來包裝它
3)使用的SimpleTimeZone .ToUniversalTime方法將DateTime轉換爲UTC。
內部使用DateTime.UtcNow。對於.NET 3.5,請查看 TimeZoneInfo.ConvertTime。
請允許我回答這個問題直接。
有沒有一種方法來定義時區在ASP.NET應用程序使得從讀/相比,目前的服務器時間隱式轉換始終...
不,這不是可能。 .NET中沒有任何機制可以在每個線程或每個應用程序的基礎上更改本地時區。它只能通過運行代碼的機器的時區設置在系統範圍內進行更改。 See this answer also。
...或者我是否需要在每個DateTime.Now調用中輸入轉換語句?
您不應該在網絡應用程序中使用DateTime.Now
。由於服務器的時區設置可以很容易地更改,因此您應該設計應用程序以忽略它。這意味着在讀取當前系統時間時使用DateTime.UtcNow
。或者,您可以使用DateTimeOffset
及其DateTimeOffset.Now
或DateTimeOffset.UtcNow
屬性。
參見:The Case Against DateTime.Now
當你需要與特定用戶的本地時間來工作,然後是 - 你必須投入轉化爲每個使用。您可以使用TimeZoneInfo
類完成此操作。
您也可以考慮使用Noda Time,它提供了IANA time zone database的實現,並且通常是一個更好的API。
- 1. 有沒有辦法讓窗口在Windows中包含自定義應用程序?
- 2. 有沒有辦法在我的asp.net應用程序的類中使用Server.MapPath
- 3. 有沒有辦法在我的應用程序中使用mstest
- 4. 有沒有辦法自定義iPhone上現有的聯繫人應用程序?
- 5. 有沒有辦法在寫angularjs時更新應用程序?
- 6. Swift - 有沒有辦法在特定時間喚醒我的應用程序?
- 7. 有沒有辦法在Blue Prism中「激活」html應用程序?
- 8. 有沒有辦法在應用程序中查找對象?
- 9. 有沒有辦法在javaFX應用程序中集成html IFrame
- 10. 有沒有辦法在ClickOnce應用程序中重置IsFirstRun?
- 11. 有沒有辦法定義在C#中的時間間隔?
- 12. 有沒有辦法在我的應用程序中鎖定屏幕?
- 13. 有沒有辦法在android中創建自定義應答機?
- 14. 有沒有辦法限制UIDocumentInteractionController中顯示的應用程序?
- 15. 有沒有辦法讓C#中的應用程序iphone
- 16. 有沒有辦法知道在iOS中刪除應用程序的時間?
- 17. 有沒有辦法在WCF中進行自定義序列化?
- 18. 有沒有辦法確保ASP.NET應用程序(僅)在HTTPS協議上運行?
- 19. 有沒有辦法從pubnub應用程序中刪除設備?
- 20. 有沒有辦法在gem內創建rails應用程序?
- 21. 有沒有辦法在Raspberry Pi上運行Angular應用程序?
- 22. 有沒有辦法在Elastic Beanstalk上部署coffeescript應用程序?
- 23. 有沒有辦法在heroku上調試play2應用程序?
- 24. 有沒有辦法在設備上開發android應用程序?
- 25. 有沒有辦法在android上運行windows mobile應用程序?
- 26. 有沒有辦法確定在Vim中是否已經定義了高亮區?
- 27. 有沒有辦法讓我的Android應用程序在安裝時運行一些自定義代碼?
- 28. 有沒有辦法讓python應用程序無法運行?
- 29. 有沒有辦法遠程查看Swing應用程序?
- 30. 有沒有辦法在.NET Framework 2中使用C#應用程序中的linq?
感謝您的意見 - 我不希望顯示爲「用戶時間」,只是從服務器的不同時間(靜態)。無論如何,這仍然回答我的問題 – 2008-11-19 06:50:30