2017-10-06 76 views
-1

我正在創建一個應用程序,將日期保存在世界時。之後,我根據用戶指定的時區更改日期。東部時間應該是-4而不是-5?如何將時區偏移量存儲在我的應用程序中?

要保存我做的日期:

var dateToSaveOnDatabase = DateTime.Now.ToUniversalTime(); 

如果我去谷歌I驗證UTC日期爲:


enter image description here


現在在我的應用程序中,我讓用戶用一個數字手動指定時區。比方說,用戶選擇-5就像我的電腦上:**


enter image description here


這意味着,在我的代碼我有

var userLocalTime = DateTime.Now.ToUniversalTime().AddHours(-5) 

如果我這樣做userLocalTime結束了等於下午8:00!東部時間應該是晚上9點,而不是晚上8點:/。如果我谷歌什麼是東部時間我得到:

enter image description here

所以我的問題是,爲什麼是東部時間等於-5,如果在現實中卻是-4小時的路程?我將用戶時區存儲在一個數字中,因爲該應用程序在c#上以及在Linux上使用。 我應該如何將時區存儲在我的應用程序中?

+4

夏令時。 –

+0

EST = -5,EDT = -4 – axlj

+0

我如何知道我是否在夏令時?我希望用戶用一個數字來分配時區。我應該從他那裏收集什麼參數? –

回答

1

在您的應用程序中最好存儲時區代碼,然後進行相應的調整。這樣您就可以考慮夏令時和其他奇怪的偏移量(並非每個人都有一小時的偏移量,在少數情況下,一些偏移量爲30或45分鐘)。

從UTC轉換爲用戶的時區在C#與時區代碼很容易爲:

DateTime timeUtc = DateTime.UtcNow; 

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"); 

DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone); 
相關問題