टेलीफ़ोनी के टाइम ज़ोन का पता लगाना

Android 11 या इससे पहले के वर्शन वाले डिवाइसों के लिए, AOSP में टाइम ज़ोन का अपने-आप पता चलने की सुविधा, टेलीफ़ोन सिस्टम के सिग्नल पर निर्भर करती है. Android 11 या उससे पहले के वर्शन पर, टाइम ज़ोन की अपने-आप पहचान करने की सुविधा, टेलीफ़ोन सिस्टम वाले डिवाइसों तक ही सीमित है. इसकी वजह यह है कि यह सुविधा, टेलीफ़ोन सिस्टम पर निर्भर करती है.

टेलीफ़ोनी के टाइम ज़ोन का पता लगाने की सुविधा उपलब्ध होने पर, यह सुविधा मोबाइल के लिए कंट्री कोड (एमसीसी) और नेटवर्क आइडेंटिटी और टाइम ज़ोन (एनआईटीज़ेड) सिग्नल का इस्तेमाल करके काम करती है.

उदाहरण के लिए, फ़्रांस में मौजूद कोई डिवाइस, आस-पास के सेल टावर से मिली एमसीसी के आधार पर ही टाइम ज़ोन की पहचान कर सकता है. ऐसा इसलिए हो सकता है, क्योंकि फ़्रांस में एक ही टाइमज़ोन का इस्तेमाल किया जाता है.

जब कोई देश एक से ज़्यादा टाइम ज़ोन का इस्तेमाल करता है, तो टाइम ज़ोन की पहचान करने के लिए सिर्फ़ एमसीसी का इस्तेमाल करना काफ़ी नहीं होता. इन देशों के लिए, डिवाइस सही टाइम ज़ोन की पहचान करने के लिए, NITZ सिग्नल का भी इस्तेमाल करता है. यह दुनिया भर की कई जगहों पर अच्छी तरह से काम करता है. लेकिन इसके लिए ज़रूरी है कि NITZ सिग्नल उपलब्ध हों और सही हों. साथ ही, यह कैरियर के हिसाब से होता है.

टेलीफ़ोन के टाइम ज़ोन की पहचान करने की सुविधा, पैसिव डिटेक्टर है. यह हमेशा काम करता है. इसलिए, फ़ोन कॉल से जुड़े सुझाव तब भी दिए जाते हैं, जब फ़िलहाल चालू time_zone_detector एल्गोरिदम, फ़ोन कॉल से जुड़ा न हो.

टेलीफ़ोन के टाइम ज़ोन की पहचान करने की सुविधा की सीमाएं

सही NITZ सिग्नल उपलब्ध होने पर भी, टेलीफ़ोनी टाइम ज़ोन का पता लगाने की सुविधा हर देश में हमेशा अच्छी तरह से काम नहीं करती. ऐसा इसलिए है, क्योंकि NITZ में सिर्फ़ ऑफ़सेट और डेलाइट सेविंग टाइम की जानकारी होती है. यह जानकारी, टाइम ज़ोन की खास पहचान करने के लिए हमेशा काफ़ी नहीं होती.

दुनिया में कई ऐसी जगहें हैं जहां टाइम ज़ोन की यह समस्या हो सकती है. उदाहरण के लिए, अमेरिका के डेनवर कोलोराडो और फ़ीनिक्स ऐरिज़ोना के बीच, सर्दियों के दौरान NITZ सिग्नल का इस्तेमाल करके अंतर नहीं किया जा सकता. हालांकि, अन्य सीज़न के दौरान ऐसा किया जा सकता है. ऐसी किसी भी जगह पर, इस तरह की समस्या आ सकती है जहां टाइम ज़ोन ओवरलैप होते हैं.

नीचे दी गई टेबल में, डेनवर और फ़ीनिक्स के मौसम के हिसाब से डिवाइस के काम करने के तरीके का उदाहरण दिया गया है. उदाहरण के लिए:

जगह और सीज़न एमसीसी या एनआईटीज़ेड से मिली जानकारी टाइम ज़ोन और व्यवहार का पता चला
डेनवर, कोलोराडो
सर्दी
समय: 1 जनवरी, 2021 को दोपहर 12:00:00
देश: अमेरिका
ऑफ़सेट: यूटीसी-7, डेलाइट सेविंग नहीं
दो ज़ोन आईडी मैच करते हैं:
  • अमेरिका/डेनवर
  • America/Phoenix

डिवाइस पर, America/Denver सही तरीके से सेट हो.
फ़ीनिक्स, ऐरिज़ोना
सर्दियां
समय: 1 जनवरी, 2021 को दोपहर 12:00:00
देश: अमेरिका
ऑफ़सेट: यूटीसी-7, डेलाइट सेविंग नहीं
दो ज़ोन आईडी मैच करते हैं:
  • अमेरिका/डेनवर
  • America/Phoenix

डिवाइस पर टाइम ज़ोन को America/Denver पर गलत तरीके से सेट किया गया है.
डेनवर, कोलोराडो
गर्मी
समय: 1 जुलाई, 2021 दोपहर 12:00:00 बजे
देश: अमेरिका
ऑफ़सेट: UTC-6, डेलाइट सेविंग
एक ज़ोन आईडी मैच करता है:
  • America/Denver

डिवाइस सही तरीके से अमेरिका/डेनवर पर सेट है.
फ़ीनिक्स, एरिज़ोना
गर्मी
समय: 1 जुलाई, 2021 को दोपहर 12:00:00
देश: अमेरिका
ऑफ़सेट: यूटीसी-7, डेलाइट सेविंग नहीं
एक ज़ोन आईडी मैच करता है:
  • अमेरिका/फ़ीनिक्स

डिवाइस पर टाइम ज़ोन, America/Phoenix पर सही तरीके से सेट है.

ऊपर दिए गए उदाहरणों से पता चलता है कि सर्दियों के दौरान, डेनवर या अरिज़ोना में मौजूद Android डिवाइसों को, मैच होने वाले दो टाइम ज़ोन आईडी में से किसी एक को चुनना होगा. यह आईडी, कुछ डिवाइसों के लिए गलत हो सकता है. इसके बावजूद, डिवाइस पर स्थानीय समय सही दिखता है. डिवाइस की घड़ी, कैलेंडर, और दूसरे ऐप्लिकेशन, सही स्थानीय समय दिखाते हैं. भले ही, टाइम ज़ोन आईडी गलत हो, क्योंकि दोनों टाइम ज़ोन आईडी, सर्दियों के दौरान एक ही स्थानीय समय का हिसाब लगाते हैं.

हालांकि, वसंत में जब डेनवर डेलाइट सेविंग टाइम का पता लगाता है और फ़ीनिक्स ऐसा नहीं करता, तो हो सकता है कि कुछ डिवाइस उपयोगकर्ता की जगह के हिसाब से गलत टाइम ज़ोन आईडी पर सेट होने पर कुछ समय के लिए गलत स्थानीय समय दिखाएं. डिवाइस को नया एनआईटीज़ेड सिग्नल मिलते ही इसे ठीक कर दिया जाता है. खास तौर पर, ऐसा सिग्नल जिसमें "यूटीसी-7, कोई डेलाइट सेविंग नहीं" ऑफ़सेट की जानकारी होती है. हालांकि, इसमें कुछ समय लग सकता है और यह मोबाइल और इंटरनेट सेवा देने वाली कंपनियों पर निर्भर करता है.

इस वजह से, टाइम ज़ोन आईडी को स्टोर करने या सर्दियों से लेकर वसंत तक इस्तेमाल करने वाले कैलेंडर या अन्य ऐप्लिकेशन, गलत स्थानीय समय दिखा सकते हैं और उसका इस्तेमाल कर सकते हैं. ऐसा तब तक होगा, जब तक कि टाइम ज़ोन आईडी को अपडेट करने वाले ऐप्लिकेशन, टाइम ज़ोन आईडी को अपडेट नहीं कर देते.

डीबग करना और जांच करना

इस सेक्शन में, टेलीफ़ोन के टाइम ज़ोन का पता लगाने की सुविधा को डीबग करने और उसकी जांच करने के लिए, शेल कमांड के बारे में बताया गया है.

टेस्ट एनवायरमेंट सेटअप करना

टेस्टर आम तौर पर, टेस्ट या सिम्युलेट किए गए टेलीफ़ोन नेटवर्क सेल के साथ टेस्टिंग एनवायरमेंट का इस्तेमाल करते हैं, ताकि टेलीफ़ोन नेटवर्क के टाइम ज़ोन का पता लगाने के तरीके की जांच की जा सके. टेस्ट सेल का इस्तेमाल, अलग-अलग एमसीसी वाले नेटवर्क को सिम्युलेट करने के लिए किया जा सकता है. साथ ही, डिवाइसों पर एनआईटीज़ सिग्नल भेजने और फिर उनके असर को मॉनिटर करने के लिए भी किया जा सकता है.

डिवाइस के टाइम ज़ोन का पता लगाने के लिए, यह ज़रूरी है कि NITZ सिग्नल की जानकारी सही हो, वह एमसीसी के मुताबिक हो, और डिवाइस में मौजूद IANA TZDB (टाइम ज़ोन के नियम) की कॉपी से मेल खाती हो. एमसीसी के साथ मेल न खाने वाले एनआईटीज़ सिग्नल की वजह से, टेलीफ़ोन एल्गोरिदम काम नहीं करता.

उदाहरण के लिए, अगर टेस्ट सेल में इस्तेमाल किया जाने वाला एमसीसी अमेरिका के लिए है, तो एनआईटीज़ेड सिग्नल में "यूनिवर्सल टाइम", ऑफ़सेट, और डेलाइट सेविंग की जानकारी होनी चाहिए, जो अमेरिका में कहीं भी सही हो.

com.android.phone सेवा के साथ इंटरैक्ट करना

यह पुष्टि करने के लिए कि डिवाइस को टेलीफ़ोन के टाइम ज़ोन के सही सुझाव मिल रहे हैं या नहीं, इनका इस्तेमाल करें:

adb shell dumpsys activity service \
    com.android.phone/com.android.phone.TelephonyDebugService

इससे टेलीफ़ोन की जानकारी मिलती है. यह जानकारी, Android की गड़बड़ी की रिपोर्ट में भी मिल सकती है. एक से ज़्यादा सिम वाले डिवाइसों में, हर सिम रेडियो की जानकारी होती है.

टाइम ज़ोन लॉग में, वे सुझाव दिखते हैं जिन्हें टेलीफ़ोन प्रोसेस ने time_zone_detector को भेजा है. साथ ही, सुझाव भेजने की वजहें भी दिखती हैं.

TimeServiceHelperImpl:
          SystemClock.elapsedRealtime()=11864061
          System.currentTimeMillis()=1620652067178
          Time Logs:
...

Time zone Logs:
    18602 / 2021-05-10T09:50:21.718Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='null', mMatchType=0, mQuality=0,
    mDebugInfo=[getTimeZoneSuggestion: nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    countryIsoCode=null, Detection
    reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}})]}
    18831 / 2021-05-10T09:50:21.948Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='Europe/London', mMatchType=3, mQuality=1,
    mDebugInfo=[findTimeZoneFromCountryAndNitz: countryIsoCode=gb,
    nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    findTimeZoneFromCountryAndNitz: lookupResult=OffsetResult{mTimeZone(ID)=Europe/London,
    mIsOnlyMatch=true}, Detection reason=handleCountryDetected("gb")]}