2013-01-10 90 views
6

C#提供了一種通過DateTime.Now獲取當前日期的方法。但問題是我的服務器是在美國,當我使用DateTime.NowC#和當前不同國家/地區的當前時間

我有美國的時間嗎?有什麼方法可以讓我的用戶來自世界各地的C#的特定國家當前的本地時間? (我有每個用戶的語言環境,所以如果我可以得到每個語言環境的當前時間,那麼我很安全)

我見過一種方式using Time Zone但後來我必須保持時區與國家參考。

我已經搜索了,這裏的大部分問題都是關於將UTC時間轉換爲本地時間,反之亦然。希望有人能夠啓發我。

+1

我沒有一個開放源碼的時區的實現提供了一個解決方案,但閱讀博客[請告訴我錯了日期時間反正(HTTP:// noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html)以查看與DateTime/DateTimeOffet相關的問題。 。 – Tilak

+0

[按國家和地區獲取時區](http://stackoverflow.com/q/7977736) –

+1

請注意,某些國家/地區跨越多個時區。所以只知道這個國家可能還不夠。直接從他的電腦中直接瞭解用戶時區。 – Guillaume

回答

4

使用UTC時間在您的服務器上保存您的時間(DateTime.UtcNow)然後根據用戶時區,您將更改此utc時間。千萬不要在db中保存當地時間

+0

你讀過[日期時間有什麼問題](http://noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html)。日期時間+本地時區+日節省光是不容易解決,因爲它出現 – Tilak

+0

看到這篇文章http://stackoverflow.com/questions/8614323/convert-server-utc-time-to-client-local-time –

+0

是它與DateTime.Now.ToUniversalTime()相同嗎? –

2

請看TimeZoneInfo類。您應該能夠在保持DST(夏令時)的同時通過那裏將本地服務器時間轉換爲服務器時間。

DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("AppTimeZone")); 

您還可以找到的大喬恩斯基特Noda Time

相關問題