簡體   English   中英

GetSystemTimeZones缺少GMT標准時間

[英]GetSystemTimeZones missing GMT Standard Time

我一直試圖在.net4中使用TimeZoneInfo.GetSystemTimeZones替換我們的舊方法,該方法使用COM來調用某些MFC代碼。 但是,由於GetSystemTimeZones不會返回所有時區,因此我不得不還原為COM方法。 總部設在英國且不在我們的選項列表中包括格林尼治標准時間是一個問題。

當我查看注冊表時,我發現GMT標准時間有一個動態DST子項,未定義任何規則。 我下載了.net4源代碼,並且在TimeZoneInfo.cs中,GetSystemTimeZones最終調用了TryCreateAdjustmentRules,如果動態DST密鑰未定義FirstEntry或LastEntry,則該返回似乎為false。

            //
            // loop over all of the "<time_zone_name>\Dynamic DST" hive entries 
            // 
            // read FirstEntry  {MinValue      - (year1, 12, 31)}
            // read MiddleEntry {(yearN, 1, 1) - (yearN, 12, 31)} 
            // read LastEntry   {(yearN, 1, 1) - MaxValue       }

            // read the FirstEntry and LastEntry key values (ex: "1980", "2038")
            Int32 first = (Int32)dynamicKey.GetValue(c_firstEntryValue, -1, RegistryValueOptions.None); 
            Int32 last = (Int32)dynamicKey.GetValue(c_lastEntryValue, -1, RegistryValueOptions.None);

            if (first == -1 || last == -1 || first > last) { 
                rules = null;
                return false; 
            }

當TryCreateAdjustmentRules返回false時,TryGetTimeZoneByRegistryKey會引發InvalidTimeZoneException,這意味着GMT標准時間不會添加到時區集合中。 我嘗試刪除空的Dynamic DST子項,但是又將它們重新添加回去(可能是Windows Update)。

我已經做了很多搜索,但是還沒有其他人報告此問題。 我不確定是否有GetSystemTimeZones修復程序,或者我是否可以停止首先出現的空Dynamic DST子項。 有任何想法嗎?

我猜這只是注冊表問題。

對於WinXP / Server 2003 SP1,這里概述了類似的內容。 請查看以下內容是否有幫助: http : //blogs.technet.com/b/dst2007/archive/2007/03/06/missing-time-zones-in-registry.aspx

我的猜測是,您可以從另一台計算機導出整個注冊表項,並將其應用於有問題的框。

事實證明,問題出在我們的COM對象上,而不是.NET代碼上。 讀取注冊表的代碼只能讀取,但錯誤地調用RegCreateKey來優化對同一注冊表分支的多次調用。

當由於新版本而注冊了COM對象(具有管理員權限)時,它將加載時區並為本地時區創建動態DST (在我的情況下為GMT / UTC)。

管理員,我想這個問題應該標記為刪除。

在仔細研究了問題之后,甚至運行了注釋中提供的代碼以打印出時區列表,我無法讓GMT出現在我的系統上。 我正在運行Windows 7 Professional,但是選擇GMT並不是一個選擇。 我知道這並不能解決您的問題,您-和許多其他人一樣-聽起來您確實需要使它與GMT一起使用。

但是,如果有可能,如果您看到使用UTC的方法,那么我將檢查以下鏈接:

Windows 7缺少對GMT的支持

將UTC轉換為GMT

您問題的另一個可能答案是,您是否仍然可以圍繞UTC值創建包裝器以顯示GMT? 我問,因為這個問題似乎不會很快消失。 即使您現在就可以使用它-將來也可能再次損壞。 如果我想出一個解決方法,我將更新我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM