x.Id == "UTC") 给出不同的结果?-6ren"> x.Id == "UTC") 给出不同的结果?-我希望 TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == anId) 总是给出相同的结果 TimeZoneInfo.FindSystemTim-6ren">
gpt4 book ai didi

c# - 为什么 TimeZoneInfo.FindSystemTimeZoneById ("UTC") 和 TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == "UTC") 给出不同的结果?

转载 作者:行者123 更新时间:2023-11-30 17:26:48 26 4
gpt4 key购买 nike

我希望

TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == anId)

总是给出相同的结果

TimeZoneInfo.FindSystemTimeZoneById(anId)

其中 anId 在两种情况下都是相同的 ID 字符串。但是,如以下代码示例所示,情况并非如此。

using System;
using System.Linq;

namespace Utc
{
public static class Program
{
public static void Main()
{
// Outputs (UTC) Coordinated Universal Time
Console.WriteLine(TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == "UTC").DisplayName);

// Outputs UTC
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("UTC").DisplayName);
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == "UTC").Id).DisplayName);

Console.ReadKey();
}
}
}

这是为什么?

请注意,此结果是使用 C# 4.7.2 版生成的,并且在 Visual Studio 2017 和 2019 中给出了相同的结果。

最佳答案

你是两个不同的结果,因为根据 GetSystemTimeZones()TimeZoneInfo.cs 实现将尝试查找 Registry.LocalMachine 并收集时区数据。

如果是FindSystemTimeZoneById它具有如下条件。如果不匹配,它将从 Registry.LocalMachine 中检索。

if (String.Compare(id, c_utcId, StringComparison.OrdinalIgnoreCase) == 0) {
return TimeZoneInfo.Utc;
}

关于c# - 为什么 TimeZoneInfo.FindSystemTimeZoneById ("UTC") 和 TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == "UTC") 给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55845466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com