我試圖在C#應用程序中控制夏令時,而不是讓Windows執行此操作。 (我在這裏不會介紹原因)。TimeZoneInfo浪漫標準時間需要一小時之前曖昧
所以我已刪除勾選「自動調整夏令時時鐘」的日期和時間設置(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:假
它是模棱兩可:真
我可能失去了一些東西。 我認爲dst是真實的,含糊不清是錯誤的,但它卻是相反的。
很難保持概述,但爲什麼我看到這種行爲?
選擇夏令時改變的確切日期無疑是問題的一部分。拋出「我會自己做」角度和UTC + 1偏移量來任意地爲問題添加一小時。通過專門以UTC工作,讓傷害停止。 –
但目標是控制窗戶的時間。包括dst轉換。如果我想用純粹的utc工作,並且我想實現控制時間轉換的目標,那麼我需要一個包含所有時區的所有規則的數據庫.....並維護它。我想我可能想仔細看看諾達時間。 .... –
你想創建Iversen標準時間嗎?這實際上是可能的,TimeZoneInfo.CreateCustomTimeZone()。說服其他程序使用它可能會成爲一個問題。 –