3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
你是兩個(gè)不同的結(jié)果,因?yàn)楦鶕?jù)GetSystemTimeZones()TimeZoneInfo.cs
的實(shí)現(xiàn)將嘗試查找和收集時(shí)區(qū)數(shù)據(jù)。Registry.LocalMachine
在FindSystemTimeZoneById的情況下,它具有如下條件。如果不匹配,它將從Registry.LocalMachine
.
if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) { return TimeZoneInfo.Utc; }

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
答案可在以下參考資料中找到FindSystemTimeZoneById
:
// Special case for Utc as it will not exist in the dictionary with the rest
// of the system time zones. There is no need to do this check for Local.Id
// since Local is a real time zone that exists in the dictionary cache
if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {
return TimeZoneInfo.Utc;
}
它所指的字典是從 填充的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones,并且是GetSystemTimeZones返回的內(nèi)容。
但是,我不認(rèn)為評(píng)論和邏輯是正確的,因?yàn)槲业?Windows 10 build 1803 機(jī)器在上述注冊(cè)表路徑中有一個(gè)“UTC”條目(假設(shè)您的計(jì)算機(jī)具有相同的條目)??雌饋?lái)這在早期版本的 Windows 中可能是正確的,但也許不再是這樣了 -已在 corefx 存儲(chǔ)庫(kù)中提交錯(cuò)誤以獲得清晰度。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
這段代碼是很久以前寫的,在那段時(shí)間假設(shè) Utc 沒(méi)有在機(jī)器上枚舉,也不會(huì)存儲(chǔ)在本地字典中。我同意現(xiàn)在情況并非如此。雖然我沒(méi)有看到這會(huì)導(dǎo)致真正的問(wèn)題,因?yàn)閮蓚€(gè) Utc 創(chuàng)建的對(duì)象都會(huì)正確運(yùn)行,但我認(rèn)為最好修復(fù)它并確保我們使用一個(gè) Utc 對(duì)象。
@Ian Kemp,感謝您在 corefx 存儲(chǔ)庫(kù)中打開(kāi)問(wèn)題。我們將在 .NET Core 的未來(lái)版本中處理這個(gè)問(wèn)題。
- 3 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報(bào)