如何计算我的时区中两个DateTime
/ DateTimeOffset
之间的实际经过时间,同时考虑夏令时,act年等?
例如,下面的代码比较2020年3月29日的00:00和05:00之间的时差,将输出6小时的时间跨度(由于夏令时,转换为本地时间后,05:00变为06:00)在我的时区开始02:00,将时钟从02:00更改为03:00)。
var timezone = TimeZoneInfo.Local;
var start = new DateTimeOffset(2020,03,29,00,timezone.BaseUtcOffset).LocalDateTime;
var end = new DateTimeOffset(2020,05,timezone.BaseUtcOffset).LocalDateTime;
var diff1 = end.Subtract(start);
var diff2 = end - start;
Console.WriteLine(diff1); // 06:00:00
Console.WriteLine(diff2); // 06:00:00
在上面的示例中,我试图输出 4小时,因为那是从00:00到05:00之间的经过时间。
00:00 -> 01:00 (+ 1 hr)
01:00 -> 02:00 (+ 1 hr)
02:00 -> 03:00 (0)
03:00 -> 04:00 (+ 1 hr)
04:00 -> 05:00 (+ 1 hr)
= 4 hrs
我在这里显然缺少什么。我已经读过Comparisons and arithmetic operations with DateTimeOffset values,但无法理解如何进行计算。
我知道NodaTime可以实现这一目标,但是肯定有一种无需外部库就能做到这一点的方法吗?