如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo
How to correctly find TimeZoneInfo for America/Los_Angeles using C#
我正在尝试使用 C# 获取 TimeZoneInfo。
我尝试使用 TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles");
但失败并出现以下错误
System.TimeZoneNotFoundException: 'The time zone ID
'America/Los_Angeles' was not found on the local computer.'
如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo?
TimeZoneInfo.FindSystemTimeZoneById
接收在 Windows 注册表中找到的 ID(具体来说,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time 区域),因此它必须是存在于机器上。洛杉矶处于“太平洋标准时间”时区。
因此,要计算当前洛杉矶时间,您需要先获取“太平洋标准时间”时区的 TimeZoneInfo
,然后获取当前 UTC 时间和 Add
TimeZoneInfo
的BaseUtcOffset
用它来计算在洛杉矶的时间。
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime laTime = DateTime.UtcNow.Add(timeZoneInfo.BaseUtcOffset);
我建议使用 TimeZoneConverter 包来获取时区信息。
PM> Install-Package TimeZoneConverter
然后您可以使用以下任一方法获取 TimeZoneInfo
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Pacific Standard");
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("America/Los_Angeles");
我正在尝试使用 C# 获取 TimeZoneInfo。
我尝试使用 TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles");
但失败并出现以下错误
System.TimeZoneNotFoundException: 'The time zone ID 'America/Los_Angeles' was not found on the local computer.'
如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo?
TimeZoneInfo.FindSystemTimeZoneById
接收在 Windows 注册表中找到的 ID(具体来说,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time 区域),因此它必须是存在于机器上。洛杉矶处于“太平洋标准时间”时区。
因此,要计算当前洛杉矶时间,您需要先获取“太平洋标准时间”时区的 TimeZoneInfo
,然后获取当前 UTC 时间和 Add
TimeZoneInfo
的BaseUtcOffset
用它来计算在洛杉矶的时间。
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime laTime = DateTime.UtcNow.Add(timeZoneInfo.BaseUtcOffset);
我建议使用 TimeZoneConverter 包来获取时区信息。
PM> Install-Package TimeZoneConverter
然后您可以使用以下任一方法获取 TimeZoneInfo
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Pacific Standard");
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("America/Los_Angeles");