2017-10-06 77 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); 
相关问题