我正在创建一个在通用时间保存日期的应用程序。之后我根据用户指定的时区更改日期。
要保存我的日期:
var dateToSaveOnDatabase = DateTime.Now.ToUniversalTime();
如果我去谷歌我验证utc日期是:
现在,在我的应用程序中,我让用户使用数字手动指定时区。让我们说用户选择-5就像在我的电脑上一样:**
这意味着在我的代码中我有
var userLocalTime = DateTime.Now.ToUniversalTime().AddHours(-5)
如果我这样做
userLocalTime
最终等于晚上8点!东部时间应该是晚上9点,而不是晚上8点:/。如果我谷歌在东部时间得到什么:
所以我的问题是为什么东部时间等于-5,如果实际上距离是-4小时?我将用户时区存储在一个数字中,因为该应用程序在c#和linux上使用。 如何在我的应用程序中存储时区?
答案 0 :(得分:1)
在您的应用程序中,最好存储时区代码,然后进行相应调整。这样你就可以考虑夏令时和其他奇怪的偏移(不是每个人都有一个小时的偏移,有些在一些情况下有30或45分钟)。
要在C#中将UTC转换为用户的时区,时区代码很简单:
DateTime timeUtc = DateTime.UtcNow;
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);