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)為評論和邏輯是正確的,因?yàn)槲业?Windows 10 build 1803 機(jī)器在上述注冊表路徑中有一個(gè)“UTC”條目(假設(shè)您的計(jì)算機(jī)具有相同的條目)??雌饋磉@在早期版本的 Windows 中可能是正確的,但也許不再是這樣了 -已在 corefx 存儲庫中提交錯(cuò)誤以獲得清晰度。
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
這段代碼是很久以前寫的,在那段時(shí)間假設(shè) Utc 沒有在機(jī)器上枚舉,也不會存儲在本地字典中。我同意現(xiàn)在情況并非如此。雖然我沒有看到這會導(dǎo)致真正的問題,因?yàn)閮蓚€(gè) Utc 創(chuàng)建的對象都會正確運(yùn)行,但我認(rèn)為最好修復(fù)它并確保我們使用一個(gè) Utc 對象。
@Ian Kemp,感謝您在 corefx 存儲庫中打開問題。我們將在 .NET Core 的未來版本中處理這個(gè)問題。
- 3 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報(bào)
