時間の概要

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Androidで時間とタイムゾーンの検出がどのように機能するかについて説明します。これには、Androidがタイムゾーンとタイムゾーンを自動的に検出する方法、デバイスメーカーの構成オプション、およびテスト情報が含まれます。

時間とタイムゾーンの概要

ステータスバーなどの場所に表示するユーザーの現地時間を決定するために、Androidは2つの関連しているが独立した状態を追跡します。

  • 現在のUnixエポック時間
  • 現在のタイムゾーン

現在のUnixエポックタイムと現在のタイムゾーンはデバイス全体の状態です。つまり、デバイスのすべてのユーザーによって共有されます。

現在のUnixエポック時間は固定値ではありません。時間の経過を反映して自動的に更新されます。通常の時間の経過に加えて、デバイスの現在のUnixエポック時間は、デバイスの電源が切れた後など、正しくないことが判明した場合に調整されます。

現在のタイムゾーンは、現在のUnixエポック時間を現地時間に変換するために行われる調整を決定します。たとえば、ロサンゼルスの夏の間、デバイスは現在のUnixエポック時間から7時間を差し引き、冬の間は8時間を差し引きます。

これらの現地時間の計算をサポートするために、すべてのAndroidデバイスにはすべてのグローバルタイムゾーンルールのデータベースがあります。タイムゾーンルールの詳細については、「タイムゾーンルール」を参照してください。

ユーザーが別のタイムゾーンを使用する新しい場所に移動する場合、現在のUnixエポック時間は調整する必要はありませんが、ユーザーは通常、以前の場所の時間ではなく現地時間を表示したいと考えています。現在のタイムゾーンを変更すると、正しいオフセットが現在のUnixエポック時間に適用され、新しい場所の正しい現地時間が表示されます。

AOSPを使用すると、ユーザーは次のメカニズムを使用して、時間とタイムゾーンを自動的に設定するかどうかを個別に制御できます。

  • 自動時間検出:デバイスの現在のUnixエポック時間が正しいことを確認します。
  • 自動タイムゾーン検出:デバイスに正しい現在のタイムゾーンがあることを確認します。

自動時刻検出

このセクションでは、自動時間検出、ユーザーコントロール、構成オプション、およびテストの詳細を管理するtime_detectorサービスの概要を説明します。

time_detectorサービス

Android 10以降を実行しているデバイスに存在するtime_detectorサービスは、自動時間検出を管理します。自動時刻検出が有効になっている場合、必要に応じてデバイスの現在のUnixエポック時刻を調整します。

time_detectorサービスは、常に2つの状態のいずれかになります:不確実または特定。サービスの特定または不確実な状態は、さまざまなソースから受け取る時間の提案によって決定されます。

time_detectorサービスが確実である場合、つまり、Unixエポック時間情報を含む提案を受信した場合、時間提案が現在のUnixエポック時間と異なる場合、現在のUnixエポック時間をオーバーライドします。

time_detectorが不確かな場合、現在の時刻は上書きされません。不確実な状態は通常、 time_detectorサービスが時間の提案を受け取っていないことを意味します。 time_detectorサービスは、受け取った提案が古すぎて使用できないと見なされた場合にも不確実になります。古いUnixエポック時間の提案を使用した調整は、デバイスの経過したリアルタイムクロックに依存するため、提案の時代が考慮されます。これは、長期間にわたって不正確であると想定されます。

現在のUnixエポック時間を自動的に確立するために、デバイスには使用できるさまざまなソースがあります。このドキュメントでは、これらをオリジンと呼びます。 time_detectorサービスは、提案のシーケンスをそれらの出所に基づいて別個のものとして扱います。

time_detectorサービスはステートフルです。つまり、各オリジンによって行われた最新の提案の記録を保持します。オリジンに最新のUnixエポック時間情報が利用可能な場合、 time_detectorに新しい提案が行われます。 time_detectorサービスは、新規および既存の提案を再評価し、提案を受信するとデバイスの状態を更新します。

UTC時間は国際的に合意されていますが、現在のUnixエポック時間をAndroidデバイスで確立することが必ずしも簡単ではない理由はさまざまです。

  • Unixエポック時間は、UTC時間とは微妙に異なる計時システムです。 2つの間で変換するには、うるう秒がいつ発生するか、およびうるう秒がオリジンによってどのように処理されるかについての知識が必要です。
  • オリジンは、特定の時間または特定の状況でのみ利用できる場合があります。たとえば、オリジンがネットワーク接続を必要とする場合、デバイスがインターネットに接続されている間のみ利用できる可能性があります。
  • 起源は不正確または不正確であるか、エラーがある可能性があります。たとえば、テレフォニーセルタワーが「ユニバーサルタイム」を正しく追跡していない場合、テレフォニーオリジンは不正確な時間の提案を提供する可能性があります。
  • Unixエポックタイムの取得中に不正確さが生じる可能性があります。たとえば、ネットワーク遅延、バッファリング、またはプロセススケジューリングにより、Unixエポック時間が不正確になる可能性があります。
  • 提案を受信して​​からの経過時間の提案を調整するために使用される基準クロックは、不正確である可能性があります。

AOSPでデフォルトで使用するように構成された2つの主要な時間検出オリジンがあります。

  • テレフォニー:ネットワークIDおよびタイムゾーン(NITZ)テレフォニー信号を使用します。
  • ネットワーク:ネットワークタイムプロトコル(NTP)タイムサーバーを使用します。

テレフォニーとネットワークオリジンの両方で、外部ネットワークへの接続が必要ですが、常に利用できるとは限りません。

Android 12以降、Androidは次のオリジンもサポートしています。これらはデフォルトで使用するように構成されていません。

  • GNSS GPSロケーションプロバイダーを使用して、GNSSソースから時刻を取得します。
  • 外部デバイスメーカーが独自のUnixエポックタイムのソースを統合できるようにする一般的な起源。

時間設定

ユーザーは、AOSP設定アプリの[システム]>[日付と時刻]で自動時刻検出を有効にできます。

設定での自動時間検出

図1.設定での自動時間検出。

次の表に、AOSP設定アプリでの時間検出のユーザーコントロールを示します。

* Android 11以下では、この設定には[ネットワーク提供の時間を使用する]というラベルが付いています

AOSP設定の場所AOSP設定名範囲行動
システム>日付と時刻時刻を自動設定*全てのユーザー

トグル。

オンの場合、デバイスは現在のUnixエポック時間を検出します。オフの場合、ユーザーにはデバイスの時刻を手動で設定するためのコントロールが提供されます。

ユーザーが手動で時間を入力する場合、Unixエポック時間ではなく、現地時間を入力します。現在のUnixエポック時間は、現在のタイムゾーンを使用してUnixエポック時間を導出することによって計算されます。

構成

デバイスメーカーは、使用するオリジンやそれらからの信号に優先順位を付ける方法など、さまざまな方法でtime_detectorサービスを構成できます。

オリジンの優先順位付け

Android 12以降、デバイスメーカーは、 core/res/res/values/config.xml構成ファイルを変更して、自動時間検出に含める時間の起点と、 time_detectorがこれらの起点を考慮する優先度を指定できます。

Android 11以下を実行しているデバイスの場合、発信元の優先度は["telephony", "network"]にハードコードされています。つまり、電話の提案はネットワークの提案よりも優先されます。

デフォルトのAOSP構成は次のとおりです。

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

Android 12では、ネットワークとテレフォニーの提案は、デフォルトで使用するオリジンとして構成されています。ネットワーク時間の提案は、テレフォニー時間の提案よりも優先されます。デバイスメーカーは、発信元の順序を変更して、テレフォニーが優先されるAndroid11以下の動作に戻すことができます。

デフォルトでは、最も優先度の高い有効な提案がデバイスの現在のシステム時刻と数秒以内に一致する場合、デバイスの時刻は変更されません。これは、 ACTION_TIME_CHANGEDインテントをリッスンするインストール済みアプリの作業を作成しないようにするためです。

許可される原点の値は次のとおりです。

下限時間

Android 12では、 time_detectorサービスが受け取った時間の提案を検証するために使用される下限時間が導入されています。下限値は、ビルドタイムスタンプから設定されます。これは、デバイスのシステムイメージが構築される前に有効な時間を設定することはできないという原則に基づいて機能します。時間の提案が下限時間の前にある場合、ビルドのタイムスタンプが正しい場合は有効ではないため、 time_detectorサービスは提案を破棄します。

Android 11以下を実行しているデバイスの場合、 time_detectorサービスは着信Unixエポック時間の提案を検証しません。

Androidは時間の上限を強制しません。

時間のデバッグとテスト

このセクションでは、 time_detectorサービスおよびすべてのオリジンによって共有されるその他のコンポーネントの動作をデバッグおよびテストする方法について説明します。

time_detectorサービスとの対話

time_detectorサービスの構成とtime_detectorサービスの状態を表示するには、次を使用します。

adb shell cmd time_detector dump

タイムゾーン検出をデバッグおよびテストするための追加コマンドを表示するには、次を使用します。

adb shell cmd time_detector help

ヘルプ出力には、テストまたは本番環境でのtime_detectorの動作に影響を与えるために使用できるdevice_configサービスプロパティも記述されています。詳細については、 device_configサービスを使用したデバイスの構成を参照してください。

自動時間検出を検証するには、テスターはtime_detectorサービスが使用しているオリジンを認識している必要があります。以下は、 adb shell cmd time_zone_detector dumpコマンドからの出力の例であり、現在のオリジンとサービス状態に関する情報が太字で示されています。

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

この情報は次のように解釈できます。

価値
mEnvironment.isAutoTimeDetectionEnabled()自動時刻検出が有効かどうか。
mEnvironment.autoTimeLowerBound()時間の提案を検証するために使用される現在の下限。
mEnvironment.autoOriginPriorities()使用中の起源と優先順位。

時間変更ログは、 time_detectorサービスがデバイスの現在のUnixエポック時間を変更した場合を示します。

提案履歴情報は、各オリジンによってどのような提案が行われたかを示します。

自動タイムゾーン検出

このセクションでは、自動タイムゾーン検出、設定でのユーザーコントロール、テレフォニーとロケーションのタイムゾーン検出、およびテストの詳細を管理するtime_zone_detectorサービスの概要を説明します。

time_zone_detectorサービス

Android 11以降を実行しているデバイスに存在するtime_zone_detectorサービスは、自動タイムゾーン検出を管理します。自動タイムゾーン検出が有効になっている場合、必要に応じてデバイスの現在のタイムゾーンを調整します。

自動タイムゾーン検出が有効になっている場合、 time_zone_detectorは、不確実特定の2つの状態のいずれかになります。

time_zone_detectorサービスが特定の状態にある場合、これは、 time_zone_detectorサービスが強力なタイムゾーン情報を受信したことを意味します。これにより、現在のタイムゾーンが上書きされる可能性があります。不確かな場合、これは情報を受信して​​いないか、信頼性の低い情報のみを受信して​​いることを意味します。つまり、現在のタイムゾーンを上書きしません。

time_zone_detectorサービスの特定の状態には、 time_zone_detectorに使用するタイムゾーン情報がない場合、または複数のタイムゾーンから選択できる状態が含まれる場合があります。これらの状態は次のとおりです。

  • 公海や紛争地域など、デバイスがタイムゾーンのない場所にある場合、タイムゾーンがゼロの特定の状態になります。この状態は不確実な状態に似ていますが、 time_zone_detectorがタイムゾーンを決定するためにさらにアクションを実行する必要がないことを示しています。
  • あいまいさや境界条件がある場合、複数のタイムゾーンを持つ特定の状態に入ります。この状態で、現在のタイムゾーンがtime_zone_detectorが確実なタイムゾーンの1つである場合、現在のタイムゾーンはそのままになります。それ以外の場合は、使用可能なタイムゾーンの1つが使用されます。これにより、ユーザーが以前に手動でタイムゾーンを選択した場合、またはデバイスが境界に近づくときに、 time_zone_detectorに粘着性の要素が与えられます。

time_zone_detectorサービスの特定または不確実な状態は、オリジンによって送信されるタイムゾーンの提案によって決定されます。

一般に、提案には、 time_zone_detectorの可能な状態に厳密に一致する2つのタイプがあります。特定不確実です。次に、提案タイプの例を示します。

  • type = "uncertain"、zoneIds = []

    • オリジンはタイムゾーンが何であるかを知りません。
  • type = "certain"、zoneIds = ["Europe / London"]

    • 起源は、ゾーンが「ヨーロッパ/ロンドン」であることは確かです。
  • type = "certain"、zoneIds = []

    • 原点は確かですが、現在地に関連付けられているゾーンIDはありません。
  • type = "certain"、zoneIds = ["America / Denver"、 "America / Phoenix"]

    • 起源は答えが2つのゾーンのうちの1つであることは確かですが、「アメリカ/デンバー」と「アメリカ/フェニックス」のどちらかを選択することはできません。

time_zone_detectorサービスは、提案のシーケンスをそれらの出所に基づいて別個のものとして扱います。オリジンによっては、オリジンがどの程度確実であるかを示すメタデータも提案に含まれる場合があります。

time_zone_detectorサービスはステートフルです。つまり、各オリジンによって行われた最新の提案の記録を保持します。以前の提案が正しくなくなった場合、新しい提案がtime_zone_detectorサービスに送信されます。つまり、オリジンに別の提案がある場合、またはオリジンがタイムゾーンを検出する機能を失った場合です。 time_zone_detectorサービスは、新規および既存の提案を再評価し、提案を受信するとデバイスの状態を更新します。

Androidは、タイムゾーン検出の2つのオリジンをサポートしています。

  • テレフォニー
  • 位置

time_zone_detectorサービスは、単一のオリジンのみを使用してタイムゾーンを決定します。ロケーションオリジンがデバイスでサポートされている場合、使用する現在のオリジンは、ユーザーが構成したタイムゾーン設定に基づいて決定されます。現在の起点がタイムゾーンに不確実になった場合、 time_zone_detectorは別の起点に切り替わりません。現在のオリジン以外のオリジンに関連付けられたサジェストは、 time_zone_detectorによってメモリに保持できますが、現在のオリジンが変更されない限り、それらは使用されません。ユーザーが自動タイムゾーン検出の設定を変更し、現在の原点が変更されると、新しい原点で利用可能な最新の提案が使用されます。

タイムゾーン設定

ユーザーは、AOSP設定アプリで自動タイムゾーン検出の設定を有効にして構成できます。

設定での自動タイムゾーン検出

図2. [設定]の自動タイムゾーン検出。

次の表に、AOSP設定アプリでのタイムゾーン検出のユーザーコントロールを示します。

* Android 11以下では、この設定には[ネットワークが提供するタイムゾーンを使用する]というラベルが付いています

AOSP設定の場所AOSP設定名範囲行動
システム>日付と時刻タイムゾーンを自動的に設定*全てのユーザー

トグル。

オンの場合、デバイスは現在のタイムゾーンの検出を担当します。オフの場合、ユーザーにはデバイスのタイムゾーンを手動で設定するためのコントロールが提供されます。

システム>日付と時刻場所を使用してタイムゾーンを設定する現在の使用者

トグル。

Android 12から利用できます。このトグルは、デバイスでロケーションタイムゾーンの検出がサポートされている場合にのみ表示されます。

位置場所を使用する現在の使用者

トグル。

一般的に、デバイスの場所の使用を許可または禁止します。この値は、ロケーションタイムゾーンの検出がデバイスでサポートされている場合に関連します。

以下に、ユーザーが選択した設定でのタイムゾーン検出のデバイス動作の概要を示します。

  • 【日時】タイムゾーンを自動設定: OFF

    • ユーザーは手動でタイムゾーンを選択する必要があります。
  • 【日時】タイムゾーンを自動設定: ON

    • 【場所】使用場所: OFF

      • テレフォニー信号は、タイムゾーンを検出するために使用されます。 (下記の注を参照してください。)
    • 【場所】使用場所: ON

      • [日付と時刻]場所を使用してタイムゾーンを設定します:オン

        • ロケーションは、タイムゾーンを検出するために使用されます。
      • [日付と時刻]場所を使用してタイムゾーンを設定する: OFF

        • テレフォニー信号は、タイムゾーンを検出するために使用されます。 (下記の注を参照してください。)

複数のユーザーデバイス

関連する設定のいくつかは現在のユーザーを対象としているため、マルチユーザーのAndroidデバイスで現在のユーザーが変更されると、デバイスのタイムゾーン検出動作が変わる可能性があります。

[場所を使用してタイムゾーンの切り替えを設定する]は現在のユーザーにスコープされ、デバイスポリシーによって制限されません。つまり、[タイムゾーンの設定]が自動的にオフになっている場合や、他の時間またはタイムゾーンが制御されている場合でも、ユーザーは常にその値を変更できます。デバイスポリシーコントローラによって制限されています。

自動検出への切り替え時および自動検出からの変更時の動作

ユーザーがタイムゾーン検出を手動から自動に切り替えると、 time_zone_detectorは現在のタイムゾーンをすでに確認している可能性があります。その場合、ユーザーが自動検出を有効にすると、デバイスのタイムゾーンが同時に変更され、 time_zone_detectorサービスの意見に一致する可能性があります。

同様に、ユーザーが設定を変更してtime_zone_detectorサービスの現在の発信元が変更された場合、 time_zone_detectorはすでに新しい発信元の提案を受け取っている可能性があるため、デバイスの時刻はtime_zone_detectorサービスの意見とすぐに一致するように変更される可能性があります。

テレフォニータイムゾーンの検出

テレフォニータイムゾーン検出は、テレフォニー信号を使用して現在のタイムゾーンを決定します。詳細については、テレフォニータイムゾーンの検出を参照してください。

ロケーションタイムゾーンの検出

ロケーションタイムゾーンの検出は、Android12以降で利用できます。これはオプションの自動タイムゾーン検出機能であり、デバイスが自分の位置を使用して現在のタイムゾーンを判別できるようにします。

Android 12で導入されたlocation_time_zone_managerサービスは、システムサーバーで実行され、 time_zone_detectorサービスにロケーションオリジンの提案を送信するためのコードが含まれています。詳細については、ロケーションタイムゾーンの検出を参照してください。

機能の採用に関する考慮事項

このセクションでは、デバイスの製造元がデバイスにこの機能を採用するかどうかを判断するのに役立つ、ロケーションタイムゾーン検出機能の側面について説明します。

テレフォニーと位置検出の比較

次の表は、タイムゾーンの検出にテレフォニー信号ではなくロケーションを使用することの長所と短所の比較を示しています。

テレフォニー検出位置検出
正しさ国によって異なります。

MCC、NITZの正確性および可用性に依存します。
機能構成またはプラグインコンポーネントによって異なります。

正確さは通常、次のように異なります。
  • ロケーションプロバイダーの精度と規則性。
  • タイムゾーンマップデータの品質。
更新可能性テレフォニー検出は、更新可能なタイムゾーンデータモジュール(com.android.tzdata APEX)に含まれるファイルに依存します。機能構成またはプラグインコンポーネントによって異なります。

更新可能性は通常、デバイスがサーバーまたはクライアントのタイムゾーンマップデータを使用するかどうかによって異なります。

注:タイムゾーンマップデータは、AndroidのTZDBおよびその他のタイムゾーン情報のコピーを更新するために使用されるタイムゾーンデータモジュールには含まれていません。

デバイスメーカーは、タイムゾーンルールとタイムゾーンマップデータ間のバージョンの整合性も考慮する必要があります。
電力使用量なしまたは低電力使用ユーザーの場所の設定、使用されているプラ​​グイン、および通常は他のアプリが場所を要求するものによって異なります。
可用性テレフォニーデバイスのみ。通常、動作するSIMが必要です。ロケーション検出は、利用可能なロケーションプロバイダーによって異なります。
ユーザーのプライバシー

ユーザーの希望するタイムゾーンは、通常、地理的な場所によって決まります。場所は機密データです。ユーザーは、タイムゾーン検出の一部として共有されている自分の場所の知識について心配する場合があります。タイムゾーンの検出とは関係なく、デバイスで実行されているすべてのアプリは、Androidの許可を必要とせずにデバイスの現在のタイムゾーンを読み取ることができ、アプリはこの情報からデバイスの場所の不正確なアイデアを推測できます。

より具体的には、タイムゾーンの検出は、パッシブまたはアクティブな手段で機能します。

  • パッシブ:デバイスの環境内の何かが、その環境で使用するタイムゾーンをデバイスに通知します。
  • アクティブ:デバイスはそれ自体のタイムゾーンを計算する必要があり、ユーザーのプライバシー設定とユーザーの同意に応じて、デバイスの場所を取得します。その後、その場所を外部サービスと共有できます。ユーザーのプライバシーと同意の詳細については、以下の説明を参照してください。

テレフォニーオリジンなどのパッシブ検出は、ユーザーにとってプライバシーに追加の影響を与えません。

ロケーションオリジンなどのアクティブな検出には、ユーザーが同意したくないデバイスのロケーションの特定が含まれ、タイムゾーンIDを特定するためにロケーションをネットワーク経由で送信できます。

タイムゾーン検出のためのユーザープライバシーに対するAndroidのアプローチにより、ユーザーはアクティブであると予想されるオリジンを個別に無効にすることができます。さらに、AOSPプラットフォームコードはロケーション自体を直接処理しません。ロケーションの検出とタイムゾーンIDへのロケーションのマッピングは、デバイスメーカーによって構成されたプラグインコンポーネントに任されています。

ユーザーのプライバシー機能の詳細については、「ロケーションタイムゾーンの検出」を参照してください。

タイムゾーンのデバッグとテスト

このセクションでは、 time_zone_detectorサービスおよびすべてのオリジンによって共有されるその他のコンポーネントの動作をデバッグおよびテストする方法について説明します。

device_configサービスを使用したデバイスの構成

device_configサービスは、Androidで使用されるメカニズムであり、独自の(非AOSP)コードによってリモートサーバーから通常取得される値を使用して変更可能な動作を構成します。テストにdevice_config値を使用する場合、特に長時間実行される手動テスト中に、デバイスがフラグを同期する場合があります。これにより、フラグがリセットされ、テスト用に設定された値がクリアされます。

Android 12以降では、フラグの同期を一時的に防ぐには、次を使用します。

adb shell cmd device_config set_sync_disabled_for_tests persistent

テスト後にフラグの同期を復元するには、次を使用します。

adb shell cmd device_config set_sync_disabled_for_tests none

フラグの同期を復元した後、デバイスを再起動します。

詳細については、 $ adb shell cmd device_config help使用してください。

time_zone_detectorサービスとのやり取り

time_zone_detectorの構成とtime_zone_detectorサービスの状態を表示するには、次を使用します。

adb shell cmd time_zone_detector dump

タイムゾーン検出をデバッグおよびテストするための追加コマンドを表示するには、次を使用します。

adb shell cmd time_zone_detector help

ヘルプ出力には、テストまたは本番環境でのtime_zone_detectorサービスの動作に影響を与えるために使用できるdevice_configサービスのプロパティも記載されています。詳細については、 device_configサービスを使用したデバイスの構成を参照してください。

タイムゾーンの検出を検証するには、テスターはtime_zone_detectorが使用しているオリジンを認識している必要があります。 time_zone_detectorの現在の起点を理解して影響を与えるには、次のいずれかのオプションを使用します。

  • 設定UIで視覚的に確認します。詳細については、タイムゾーンの設定を参照してください。
  • adbを介してコマンドラインを使用します。

    • time_zone_detectorの状態をダンプするには、 adb shell cmd time_zone_detector dumpを使用します
    • デバイス設定を変更するには、他のtime_zone_detectorコマンドを使用します。詳細については、 adb shell cmd time_zone_detector help使用してください。

以下は、 adb shell cmd time_zone_detector dumpコマンドからの出力の例であり、現在のオリジンとサービス状態に関する情報が太字で示されています。

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

この情報は次のように解釈できます。

価値
mUserConfigAllowedユーザーがデバイスポリシーコントローラーによって日付と時刻の設定を制御できないようにするかどうか。
mTelephonyDetectionSupportedデバイスにテレフォニータイムゾーン検出があるかどうか。
mGeoDetectionSupportedデバイスにロケーションタイムゾーン検出があるかどうか。これは、構成少なくとも1つのLTZPの存在に基づく有効な状態です。
mAutoDetectionEnabled自動タイムゾーン検出が有効になっているかどうか。
mLocationEnabledマスターの場所を切り替えます。
mGeoDetectionEnabled発信元スイッチ: `false`はテレフォニーの発信元を示し、`true`はロケーションの発信元を示します。

提案履歴情報は、設定(手動)、およびテレフォニーとロケーションの発信元によって行われた提案を示します。