Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当前时区为UTC时,TimeZoneInfo.GetSystemTimeZones不包含TimeZoneInfo.Local_C#_Timezone_Mono - Fatal编程技术网

C# 当前时区为UTC时,TimeZoneInfo.GetSystemTimeZones不包含TimeZoneInfo.Local

C# 当前时区为UTC时,TimeZoneInfo.GetSystemTimeZones不包含TimeZoneInfo.Local,c#,timezone,mono,C#,Timezone,Mono,在我的linux机器中,时区设置为UTC [root@(none) /]# date Tue Sep 22 16:11:12 UTC 2020 我曾经运行过一个程序 TimeZoneInfo localZone = TimeZoneInfo.Local; ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones (); foreach (TimeZoneInfo zon

在我的linux机器中,时区设置为UTC

[root@(none) /]# date
Tue Sep 22 16:11:12 UTC 2020
我曾经运行过一个程序

TimeZoneInfo localZone = TimeZoneInfo.Local; 
      ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones ();
      foreach (TimeZoneInfo zoneVal in zones) {
          if (localZone.StandardName == zoneVal.StandardName) {
              Console.WriteLine("local zone found!!"); //this is not printing
          }
      }
TimeZoneInfo localZone=TimeZoneInfo.Local;
ReadOnlyCollection zones=TimeZoneInfo.GetSystemTimeZones();
foreach(时区信息区域中的zoneVal){
if(localZone.StandardName==zoneVal.StandardName){
Console.WriteLine(“找到本地区域!!”);//这不是打印
}
}
如果我使用DotnetCore2.1运行,这个程序运行得很好。但是如果我用mono 6.0.0.327运行它,它就无法在系统时区中找到localZone


有没有办法让它在不改变UTC当前时区和不改变dotnet的情况下工作?

StandardName属性不标识时区。它是一个本地化的字符串,用于人类显示,并且仅在夏令时无效时,甚至在夏令时

要识别时区,请使用
Id
属性,而不是
StandardName

此外:

  • 如果需要UTC,请使用
    TimeZoneInfo.UTC

  • 如果需要本地时区,请使用
    TimeZoneInfo.local


  • 如果要查找时区,请使用
    TimeZoneInfo.FindSystemTimeZoneById
    并将所需时区的
    Id
    传递给它。当在Linux上运行时,将使用ID;当在Windows上运行时,将使用Windows时区标识符

  • 如果您想编写与平台无关的代码,请使用我的库中的
    TZConvert.GetTimeZoneInfo

  • 如果确实需要匹配
    TimeZoneInfo
    对象,请使用
    Equals
    方法,该方法比较
    Id
    和调整规则(对于可能已构建自定义时区或在Windows上禁用DST的边缘情况)。请参阅的备注部分。例如:

    if (localZone.Equals(zoneVal))
    {
        ...
    }
    

  • 还要注意的是
    TimeZoneInfo.Local
    TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)
    之间存在差异,尤其是在Windows上禁用DST时


TimeZoneInfo.FindSystemTimeZoneById有帮助,谢谢