2016-11-30 2 views
2

私は、UTC、中央タイムゾーン、シンガポール標準時のタイムゾーン変換を行う必要があるdotnet core asp.net mvcアプリケーションを持っています。私はこれを私のWindows開発環境で、TimeZoneInfo.FindSystemTimeZoneByIdメソッドを使用してタイムゾーンインスタンスを設定し、そのタイムゾーンインスタンスをTimeZoneInfo.ConvertTimeに渡して、目的のタイムゾーンの時間を取得します。私はCentOS7にWebアプリケーションを展開するときしかし、私はエラーを取得する:dotnet core crossplatform(Windows&CentOS)タイムゾーン変換エラー

"Could not find file '/usr/share/zoneinfo/Central Standard Time'."


私は、これは両方のプラットフォーム上で動作するように取得するために行うには何が必要ですか? * nixの上の.NETのコアは、IANAのタイムゾーンを使用しながら、Windows上

public TimeZoneInfo TimeZoneInstance 
    { 
     get 
     { 
      if (_timeZoneInstance == null) 
      { 
       try 
       { 
        _timeZoneInstance = TimeZoneInfo.FindSystemTimeZoneById(TimeZone); 
       } 
       catch 
       { 
        TimeZone = "Central Standard Time"; 
        _timeZoneInstance = TimeZoneInfo.FindSystemTimeZoneById(TimeZone); 
       } 
      } 
      return _timeZoneInstance; 
     } 
     private set { _timeZoneInstance = value; } 
    } 

    public DateTime? GetUserTime(DateTime? utcTime = null) 
    { 

     if (utcTime == null) 
      return utcTime; 

     return TimeZoneInfo.ConvertTime(DateTime.SpecifyKind(utcTime.Value, DateTimeKind.Utc), TimeZoneInfo.Utc, TimeZoneInstance); 
    } 

    public DateTime? GetUtcTime(DateTime? localTime) 
    { 
     if (localTime == null) 
      return localTime; 



     return TimeZoneInfo.ConvertTime(localTime.Value, TimeZoneInstance, TimeZoneInfo.Utc); 
    } 

答えて

0

.NETのコアはWindows time zone IDsを使用しています。

クロスプラットフォームタイムゾーンの最も簡単なアプローチは、NodaTimeのIANA IDを使用しています。あなたは、外部依存関係を追加し、NodaTime.DateTimeZoneの代わりTimeZoneInfoを使用する必要があります

NodaTime.DateTimeZoneProviders.Tzdb.Ids 

:IDはで入手できます

NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/Chicago"); 

タイムゾーンのリスト:NodaTimeで、あなたはこれでタイムゾーンを取得することができます。しかし、それはTimeZoneInfoより多くのクロスプラットフォームフレンドリーです。

関連する問題