【发布时间】:2011-02-04 13:07:26
【问题描述】:
我将日期/时间以 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());
【问题讨论】:
-
供参考:Microsoft 时区索引值support.microsoft.com/en-gb/help/973627/…