2017-12-16 17 views
2

私は.NET Framework 2.0への.NET Framework 4.5アプリケーションの移植に取り組んでおり、Macでいくつかのテストを開始しました。プラットフォームに依存しない方法でTimeZoneInfoを取得するにはどうすればよいですか?

TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 

をそれがMac上で、次の例外がスローされます:私はWindows上で.NETのコア2.0でこのコードを実行すると、それが正常に動作し、いくつかのチャンスをうかがった後

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) 

を、使用しているようですタイムゾーンID "America/Los_Angeles"はMacで問題を解決します。

私はこのプラットフォームにとらわれないために何をすべきかと思います。 "Pacific Standard Time"を探して、キャッチブロックで"America/Los Angeles"を見つけようとする必要がありますか?それは不器用だと思われます。もし別のプラットフォームにもう一つの文字列があればどうでしょうか?私は欲しいTimeZoneInfoを調べる良い方法はありますか?

答えて

2

これは既知の問題であり、dotnet/corefx#11897で追跡されます。まだ組み込みのソリューションはありません。

しかし、これには私のTimeZoneConverterライブラリを使用できます。

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

タイムゾーンがコンピュータに存在するかどうかが最初に確認されます。そうでない場合は、IANA形式(この場合はAmerica/Los_Angeles)の同等のタイムゾーンに変換され、代わりにそれを取得しようとします。逆の場合もありますので、どのOSでもどちらの形式でも使用できます。

関連する問題