我将数据库中的日期/时间存储为UTC,并根据特定时区将其在我的应用程序中计算回本地时间.比方说我有以下日期/时间:
01/04/2010 00:00
比如说它是一个国家,例如英国,它遵守DST(夏令时),在这个特定的时间,我们在夏令时.当我将此日期转换为UTC并将其存储在数据库中时,它实际存储为:
31/03/2010 23:00
由于日期将调整为夏令时的-1小时.当您在提交时观察DST时,此工作正常.但是,当时钟调整回来时会发生什么?当我从数据库中提取该日期并将其转换为本地时间时,特定日期时间将被视为31/03/2009 23:00实际上它被处理为01/04/2010 00:00.
如果我错了,请纠正我但是在存储UTC时间时这不是一个缺陷吗?
时区转换的示例
基本上我正在做的是存储信息提交到我的系统的日期/时间,以便允许用户进行范围报告.这是我存储日期/时间的方式:
public DateTime LocalDateTime(string timeZoneId)
{
var tzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).ToUniversalTime().ToLocalTime();
}
Run Code Online (Sandbox Code Playgroud)
存储为UTC:
var localDateTime = LocalDateTime("AUS Eastern Standard Time");
WriteToDB(localDateTime.ToUniversalTime());
Run Code Online (Sandbox Code Playgroud)