コンピューター(シミュレーターでテストする場合)または電話(電話で直接テストする場合)でタイムゾーンを変更しても、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()タイムゾーンの変更を考慮に入れるように強制できる方法はありますか?