C# 在基于Linux的Azure DevOps代理上找不到时区ID
我曾尝试使用C# 在基于Linux的Azure DevOps代理上找不到时区ID,c#,.net-core,C#,.net Core,我曾尝试使用TimeZoneConverter库和如下代码来识别正确的时区ID,但是在基于Linux的代理上运行dotnet test时,它总是返回与Windows兼容的ID 如何在Linux计算机上运行测试并在Windows计算机上运行项目,而不获取此异常System.TimeZoneNotFoundException:在本地计算机上找不到时区ID“E.南美标准时间”。 public static TimeZoneInfo GetOSSpecificTimeZone() { retu
TimeZoneConverter
库和如下代码来识别正确的时区ID,但是在基于Linux的代理上运行dotnet test
时,它总是返回与Windows兼容的ID
如何在Linux计算机上运行测试并在Windows计算机上运行项目,而不获取此异常System.TimeZoneNotFoundException:在本地计算机上找不到时区ID“E.南美标准时间”。
public static TimeZoneInfo GetOSSpecificTimeZone()
{
return TimeZoneInfo.GetSystemTimeZones().Any(x => x.Id == "E. South America Standard Time") ?
TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time") :
TimeZoneInfo.FindSystemTimeZoneById("America/Sao_Paulo");
}
对不起,我没听懂。为什么有相似的身份证?每个平台的ID都是正确的,第一个在Windows上可用,第二个仅在Linux上可用。问题是GetSystemTimeZones()返回第一个可用的时区,但它不是。无论我使用的是NET 4.7(Windows)还是.NET 5(Linux),它都可以工作。您有办法重现此问题吗?您的最佳选择可能是使用第一个值进行
FindSystemTimeZoneById
调用。如果它抛出异常,请尝试第二个值。这样就不需要调用GetSystemTimeZones
。