我试图在 C# 应用程序中控制夏令时,而不是让 Windows 来做。(我不会在这里讨论原因)。
所以我删除了日期和时间设置中的复选标记“自动调整夏令时时钟”(Windows7)
我写了一小段代码来演示我面临的问题。
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
// "Romance Standard Time"
var rule = tzi.GetAdjustmentRules()[0];
System.Globalization.CultureInfo.CurrentCulture.ClearCachedData();
var timestampToWorkOn = DateTime.Now;
Console.WriteLine("Timezone is: " + tzi.ToString());
Console.WriteLine("Timezone id is: " + tzi.Id);
Console.WriteLine("Timestamp right now: " + timestampToWorkOn.ToString("yyyy-MM-dd HH:mm"));
Console.WriteLine("Rule for change says: " + rule.DaylightTransitionEnd.TimeOfDay.ToString("HH:mm"));
Console.WriteLine("Is it dst: " + tzi.IsDaylightSavingTime(timestampToWorkOn));
Console.WriteLine("Is it ambiguous:" + tzi.IsAmbiguousTime(timestampToWorkOn));
由于从 dst 到正常时间的转换应该发生在 3:00,我怀疑从 2:00 到 3:00 的时间会是模棱两可的。但是在 1:54 运行代码的结果是:
时区是:(UTC+01:00) 布鲁塞尔、哥本哈根、马德里、巴黎
时区 id 是:浪漫标准时间
现在的时间戳:2013-10-27 01:54
更改规则说:03:00
是 dst: False
是它模棱两可:真
我可能会遗漏一些东西。我希望 dst 是真的,而模棱两可是假的,但情况恰恰相反。
很难保持概览,但为什么我会看到这种行为?