【发布时间】:2020-01-17 23:09:26
【问题描述】:
以下代码将按时区返回正确的日期。 TimeZoneInfo.ConvertTimeBySystemTimeZoneId 在我的情况下还不够快。这是一种更快的方法吗?
// Return the date part of t by tz
DateTime GetDateByTZ(DateTimeOffset t, string tz)
{
return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(t, tz).Date;
}
var t1 = DateTimeOffset.Parse("1/17/2020 21:00 -5");
GetDateByTZ(t1, 'GMT Standard Time') // returns 2020-1-18
我需要一个超级快的GetDateByTZ 版本。
我发现使用 t.AddHours(...).Date 快得多,但我需要维护一个小时偏移量查找表,以及夏令时更改的逻辑 (https://en.wikipedia.org/wiki/Daylight_saving_time)。
例如,如果我在伦敦,我可以拨打DateTime.Now.AddHours(-5).Date 以获取“东部标准时间”的日期。但是,我需要在夏天将 -5 更改为 -4。
【问题讨论】:
-
很困惑,你有什么问题
-
为什么觉得不够快?您运行了哪些基准测试?
-
如果您遇到复杂的日期/时区问题,Noda Time (nodatime.org) 通常是解决方案的一部分
-
另外,您使用的是哪个 .NET 运行时?您每次传递的时区 ID 是相同的,还是不同的?
-
@MattJohnson-Pint,10M 调用大约需要 2 秒。