0

現在の時刻を中部標準時に変換しようとしています。Mono と .NET では、どちらも機能します。

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
TimeZoneInfo.ConvertTime(DateTime.UtcNow, cst);
TimeZoneInfo.ConvertTime(DateTime.Now, cst);

MonoDroid 3.0.4 では、最初のエラーで次のエラーが発生します。

Unhandled Exception:
System.ArgumentException: Kind propery of dateTime is Utc but the sourceTimeZone does not equal TimeZoneInfo.Utc
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

そして2番目はこのエラーを出します:

Unhandled Exception:
System.ArgumentNullException: Argument cannot be null.
Parameter name: destinationTimeZone
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo     sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 
  at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in <filename unknown>:0 

TimeZoneInfo.ConvertTimeBySystemTimeZoneId と同じ問題。

とにかく、MonoDroid を使用して異なるタイムゾーンで現在の時刻を取得するには?

4

1 に答える 1

2

考えられる回避策の 1 つは、3 つのパラメーターのバージョンを自分で呼び出すことです。

var zoned = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Utc, cst);

編集:関心のあるゾーンが見つからない場合はa をスローするFindSystemTimeZoneById 必要がありますが、この場合は を返すだけなのだろうかと思います。TimeZoneNotFoundExceptionnull

MonoDroid のタイム ゾーン ID が TZDB のものである可能性があります。その場合は、次を使用してみてください。

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("America/Chicago");
于 2012-10-23T13:28:06.963 に答える