C# 当前时区为UTC时,TimeZoneInfo.GetSystemTimeZones不包含TimeZoneInfo.Local
在我的linux机器中,时区设置为UTCC# 当前时区为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
[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
传递给它。当在Linux上运行时,将使用ID;当在Windows上运行时,将使用Windows时区标识符Id
- 如果您想编写与平台无关的代码,请使用我的库中的
TZConvert.GetTimeZoneInfo
- 如果确实需要匹配
对象,请使用TimeZoneInfo
方法,该方法比较Equals
和调整规则(对于可能已构建自定义时区或在Windows上禁用DST的边缘情况)。请参阅的备注部分。例如:Id
if (localZone.Equals(zoneVal)) { ... }
- 还要注意的是
和TimeZoneInfo.Local
之间存在差异,尤其是在Windows上禁用DST时TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)