Linux 在 GlobalConfiguration 中指定非本地时区失败

Specifying non-local time zone in GlobalConfiguration fails on Linux

我的测试将 运行 分布在美国各地的各种 machines/containers 上,所以我希望他们都以东部时间记录他们的时间。如果我这样做:

AtataContext.GlobalConfiguration.UseTimeZone(System.TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))

我所有由 Windows 机器生成的日志都工作正常,但在 linux (Debian 11) 中我得到这个:

  Error Message:
   OneTimeSetUp: System.TimeZoneNotFoundException : The time zone ID 'Eastern Standard Time' was not found on the local computer.
  ----> System.IO.FileNotFoundException : Could not find file '/usr/share/zoneinfo/Eastern Standard Time'.

我还需要做些什么来同步所有日志的时区吗?

这个有效:

using System;

TimeZoneInfo ET;
    
if (WebDriverSetup.OSInfo.IsWindows)
{
    ET = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
}
else
{
    ET = TimeZoneInfo.FindSystemTimeZoneById("US/Eastern");
}

AtataContext.GlobalConfiguration.UseTimeZone(ET);

前面的回答是正确的。您可以根据当前 OS 找到不同名称的时区。但除此之外还有另一种解决方案。

您可以将 TimeZoneConverter NuGet 包添加到项目中,并使用其 TZConvert class 查找 Windows 或 Linux 时间的时区区域 ID.

AtataContext.GlobalConfiguration.UseTimeZone(TZConvert.GetTimeZoneInfo("US/Eastern"));