我将日期/时间作为 UTC 存储在数据库中,并在我的应用程序中根据特定时区将它们计算回本地时间。例如说我有以下日期/时间:
01/04/2010 00:00
假设这是一个国家,例如英国,它遵守 DST(夏令时),在这个特定时间我们处于夏令时。当我将此日期转换为 UTC 并将其存储在数据库中时,它实际上存储为:
31/03/2010 23:00
由于 DST 的日期将调整为 -1 小时。当您在提交时观察 DST 时,这可以正常工作。但是,当时钟调回时会发生什么?当我从数据库中提取该日期并将其转换为本地时间时,该特定日期时间将被视为31/03/2010 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();
}
存储为 UTC:
var localDateTime = LocalDateTime("AUS Eastern Standard Time");
WriteToDB(localDateTime.ToUniversalTime());