东部时间应该是-4而不是-5?如何在我的应用程序中存储时区偏移量?

时间:2017-10-06 01:48:50

标签: c# datetime timezone timezone-offset

  

我正在创建一个在通用时间保存日期的应用程序。之后我根据用户指定的时区更改日期。

     

要保存我的日期:

 var dateToSaveOnDatabase = DateTime.Now.ToUniversalTime();
  

如果我去谷歌我验证utc日期是:

enter image description here

  

现在,在我的应用程序中,我让用户使用数字手动指定时区。让我们说用户选择-5就像在我的电脑上一样:**

enter image description here

  

这意味着在我的代码中我有

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

如果我这样做userLocalTime最终等于晚上8点!东部时间应该是晚上9点,而不是晚上8点:/。如果我谷歌在东部时间得到什么:

enter image description here

  

所以我的问题是为什么东部时间等于-5,如果实际上距离是-4小时?我将用户时区存储在一个数字中,因为该应用程序在c#和linux上使用。 如何在我的应用程序中存储时区?

1 个答案:

答案 0 :(得分:1)

在您的应用程序中,最好存储时区代码,然后进行相应调整。这样你就可以考虑夏令时和其他奇怪的偏移(不是每个人都有一个小时的偏移,有些在一些情况下有30或45分钟)。

要在C#中将UTC转换为用户的时区,时区代码很简单:

DateTime timeUtc = DateTime.UtcNow;

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

DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);