コンピューター(シミュレーターでテストする場合)または電話(電話で直接テストする場合)でタイムゾーンを変更しても、DateTime.ToLocalTime()
更新された結果が返されません。
の通知イベントを登録して正常に受信しましたUIApplication.Notifications.ObserveSignificantTimeChange
。TimeZoneInfo.ClearCachedData()
その中で、タイムゾーンが実際に変更されたことを検出できるように呼び出しますが、これはに影響を与えませんToLocalTime()
。DateTime
私が変換しているのは間違いなく協定世界時です(たとえば試してDateTime.UtcNow
みました)。
CultureInfo.CurrentCulture.ClearCachedData()
この質問で提案されているように呼び出してみました: SetTimeZoneInformationは別の.NETアプリケーションのDateTime.Nowを更新しません。これにより、がnullの場合にのみアプリケーションがクラッシュしますCurrentCulture
。
の実装をもう少し深く掘り下げるとToLocalTime()
、オブジェクトを使用しているようTimeZone.CurrentTimeZone
です。DateTime.GetNow()
このオブジェクトは、との差がある場合にのみリセットされますTimeZone.timezone_check
。が呼び出さTimeZone.timezone_check
れたときに更新されていないのではないかと思います。TimeZoneInfo.ClearCachedData()
ToLocalTime()
タイムゾーンの変更を考慮に入れるように強制できる方法はありますか?