我想在我的数据库中保存一个 DateTimeOffset 作为我提供的时区
当我从应用程序的前端获取日期时,它将作为 UTC 时间传入。
在数据库中,我不要这个:2020-06-24 20:00:00.000000 +00:00
,我想要这个:2020-06-24 16:00:00.000000 -04:00
我想这样做的原因是,SQL Server 中有一些不考虑时区的旧函数和存储过程,但我们仍然希望在正确的日期查找内容。例如:美国东部标准时间 6 月 25 日晚上 11 点发生的事件,当前将保存为 6 月 26 日凌晨 3 点 UTC。现在,如果我们查找 6/25 的所有事件,则不会显示 6/25 11PM 事件。这就是为什么我想在数据库上将其另存为 EST。
我已经查看了TimeZoneInfo.ConvertTime
但这只接收并返回日期时间,而不是日期时间偏移量
我真的在寻找类似DateTimeOffset.ConvertTo(TimeZoneInfo)
的东西,但我还没有找到一个好的解决方案,也可以照顾 DST
这就是我最终解决这个问题的方式。在这种情况下,这会将其转换为正确的时区
private DateTimeOffset ChangeTimezone(DateTimeOffset originalTime)
{
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time");
return originalTime.ToOffset(tzi.GetUtcOffset(originalTime));
}
在我的测试中,这也保留了 DST。例如,中部时间的偏移量为 -5,夏令时的偏移量为 -6。