gpt4 book ai didi

macos - 我应该如何以与平台无关的方式获取TimeZoneInfo?

转载 作者:行者123 更新时间:2023-12-04 17:30:49 27 4
gpt4 key购买 nike

我正在将.NET Framework 4.5应用程序移植到.NET Core 2.0,并且已经开始在Mac上进行一些测试。当我在Windows的.NET Core 2.0上运行此代码时,它可以正常工作:

TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

但在Mac上会引发以下异常:
System.TimeZoneNotFoundException: The time zone ID 'Pacific Standard Time' was not found on the local computer. ---> System.IO.FileNotFoundException: Could not find file '/usr/share/zoneinfo/Pacific Standard Time'.
at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.File.ReadAllBytes(String path)
at System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine(String id, TimeZoneInfo& value, Exception& e)
--- End of inner exception stack trace ---
at System.TimeZoneInfo.FindSystemTimeZoneById(String id)

经过一番摸索之后,似乎在Mac上使用时区ID "America/Los_Angeles"可以解决此问题。

我想知道如何使该平台不可知。我应该尝试查找 "Pacific Standard Time",然后尝试在catch块中查找 "America/Los Angeles"吗?这看起来很笨拙,如果另一个平台还提供另一个字符串怎么办?有没有更好的方法来查找我想要的TimeZoneInfo?

最佳答案

这是一个已知问题,已在dotnet/corefx#11897中进行了跟踪。尚无内置解决方案。

但是,我的TimeZoneConverter库可用于此目的。

TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Pacific Standard Time");

通过首先查看计算机上是否存在时区来工作。如果不是,那么它将转换为IANA格式的等效时区(在这种情况下为 America/Los_Angeles),并尝试使用该时区进行检索。相反的情况也适用,因此您可以在任何OS上使用任何一种格式。

关于macos - 我应该如何以与平台无关的方式获取TimeZoneInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848111/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com