एंड्राइड मोबाइल से TimeZone कैसे प्राप्त करें?


139

मैं बटन क्लिक करते समय Android मोबाइल से समय क्षेत्र प्राप्त करना चाहता हूं।


11
टाइमज़ोन tz = TimeZone.getDefault (); स्ट्रिंग gmt1 = TimeZone.getTimeZone (tz.getID ())। GetDisplayName (गलत, TimeZone.SHORT); स्ट्रिंग gmt2 = TimeZone.getTimeZone (tz.getID ())। GetDisplayName (गलत, TimeZone.LONG); Log.d ("टैग", "टाइमज़ोन:" + gmt1 + "\ t" + gmt2); और यह कोड है
आशा v

10
मैं आशा v पर इतना खुरदरा नहीं होता। मैं बस एक ही चीज़ की तलाश में था और मुझे जो जवाब मिले वो इन सबसे अलग थे। वास्तव में सटीक "TimeZone.getDefault" द्वारा खोज मुझे यहाँ ले गई।
यार

जवाबों:


189

क्या आपने उपयोग करने की कोशिश की है TimeZone.getDefault():

अधिकांश एप्लिकेशन TimeZone.getDefault () का उपयोग करेंगे, जो उस समय क्षेत्र के आधार पर TimeZone लौटाता है जहां प्रोग्राम चल रहा है।

Ref: http://developer.android.com/reference/java/util/TimeZone.html


22
यदि आप JodaTime का उपयोग कर रहे हैं , तो आप निम्न के साथ DateTimeZone प्राप्त कर सकते हैं:DateTimeZone.forTimeZone(TimeZone.getDefault());
जोशुआ पिंटर

@JoshPinter मैं किस पैकेज का उपयोग करता हूं, android.icu.utils या java.util पर एक?
नियॉन वारगे ने

1
मैंने डिवाइस से टाइम ज़ोन को CST में बदल दिया, यह मुझे CST वापस नहीं दे रहा है। क्या डिवाइस का टाइम ज़ोन प्राप्त करने का कोई तरीका है?
अभिनव सक्सेना

मैं सोच रहा हूँ, क्या TimeZone.getDefault प्रभावित हो जाता है अगर हम किसी तरह डिवाइस के टाइमज़ोन को नकली बनाते हैं। यह एंड्रॉइड सिम्युलेटर पर नहीं लगता है।
हौ लुऊ

@NeonWarge दोनों काम करेंगे, हालाँकि android.icu केवल API 24 और इसके बाद के संस्करण के लिए काम करता है।
निकोलस

136
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());

आउटपुट:

टाइमजोन GMT + 09: 30 टाइमज़ोन आईडी :: ऑस्ट्रेलिया / डार्विन


@ फलेक्सो को एंड्रॉइड डिवाइस से टाइमस्टैम्प कैसे प्राप्त करें
KOUSIK daniel

4
आउटपुट के साथ शानदार व्याख्या
आनंद सवानी


14

मुझे उन ऑफसेटों की आवश्यकता थी जिनमें न केवल दिन की रोशनी की बचत का समय शामिल था बल्कि एक संख्यात्मक के रूप में । यहाँ वह कोड है जो मैंने उपयोग किया है यदि कोई उदाहरण के लिए देख रहा है।

मुझे "3.5" (3:30 ') की प्रतिक्रिया मिलती है, जो कि मैं तेहरान में, सर्दियों में ईरान और गर्मियों के लिए "4.5" (4:30') की उम्मीद करता हूं ।

मुझे इसकी एक स्ट्रिंग के रूप में भी आवश्यकता थी इसलिए मैं इसे एक सर्वर पर पोस्ट कर सकता हूं ताकि आपको अंतिम पंक्ति की आवश्यकता न हो।

सही समय क्षेत्र प्राप्त करने के लिए:

TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);

1
यह मेरे लिए काम कर रहा था क्योंकि मैं केवल अवधि (एक स्टॉपवॉच के रूप में) के साथ काम कर रहा था।
अहसान

13

इस कोड को आज़माएं-

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();

यह उपयोगकर्ता को चयनित समयक्षेत्र लौटाएगा।


4
इसके Calendarलिए एक वस्तु बनाना एक बकवास है। इस प्रकार की वस्तु का निर्माण महंगा है। TimeZone.getDefault()इसे प्राप्त करने का उपयुक्त तरीका है।
अनाम

3
@KrLx_roller उत्तर को डाउनवोट करने से पहले ध्यान से देखें। मैंने अपने उत्तर रिटर्न उपयोगकर्ता को चयनित समय-काल लिखा है जबकि TimeZone.getDefault () स्थापना डिफ़ॉल्ट समय क्षेत्र वापस कर देगा। अधिक जानकारी के लिए कृपया code.google.com/p/android/issues/detail?id=2037 पर क्लिक करें
अनुजप्रेशर

आपका कोड एंड्रॉइड 4.2 पर TimeZone.getDefault () के समान टाइमज़ोन देता है। TimeZone.getDefault () सेटिंग्स में चुने गए टाइमज़ोन को लौटाएगा -> दिनांक और समय।
user1088166


3

सरल दिनांक प्रारूप के साथ सबसे सरल समाधान: SimpleDateFormat ("ZZZZZ"):

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
                Locale.getDefault());
        Date currentLocalTime = calendar.getTime();

        DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
        String localTime = date.format(currentLocalTime);
        System.out.println(localTime+ "  TimeZone   " );

==> आउटपुट है: +05: 30


2

Http://developer.android.com/reference/android/text/format/Time.html के अनुसार आपको डिवाइस के वर्तमान समयक्षेत्र को पुनः प्राप्त करने के लिए Time.getCurrentTimezonezone () का उपयोग करना चाहिए।


3
कूल, लेकिन एपीआई स्तर 22 के बाद से पदावनत किया गया
एपिकपांडाफार्स

2

Java.time और ThreeTenABP से जोनआईड

आधुनिक उत्तर:

    ZoneId zone = ZoneId.systemDefault();
    System.out.println(zone);

जब मैंने इस स्निपेट को ऑस्ट्रेलिया / सिडनी टाइम ज़ोन में चलाया, तो आउटपुट बिल्कुल यही था:

Australia/Sydney

यदि आप चाहते हैं कि ग्रीष्मकालीन समय (DST) समय क्षेत्र का नाम या संक्षिप्त नाम:

    DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
    String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
    System.out.println(longTz);

    DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
    String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
    System.out.println(shortTz);
Eastern Summer Time (New South Wales)
EST

TimeZoneअन्य उत्तर के अधिकांश में इस्तेमाल किया वर्ग क्या हम यह सवाल पूछे जाने 2011 में कहा गया था, भले ही यह खराब तरीके से तैयार किया गया था, था। आज यह लंबे समय से पुराना है, और मैं सलाह देता हूं कि इसके बजाय हम जावा का उपयोग करते हैं। आधुनिक जावा दिनांक और समय एपीआई जो 2014 में सामने आया था।

प्रश्न: java.time को Android API स्तर 26 की आवश्यकता नहीं है?

java.time पुराने और नए दोनों Android उपकरणों पर अच्छी तरह से काम करता है। इसके लिए बस कम से कम जावा 6 की आवश्यकता होती है ।

  • जावा 8 और बाद में और नए एंड्रॉइड डिवाइसों पर (एपीआई स्तर 26 से) आधुनिक एपीआई बिल्ट-इन आता है।
  • गैर-एंड्रॉइड जावा 6 और 7 में थ्रीटैन बैकपोर्ट मिलता है, आधुनिक कक्षाओं का बैकपोर्ट (जेएसआर 310 में थ्रीटेन, नीचे के लिंक देखें)।
  • पर (पुराने) एंड्रॉइड, थ्रीटेन बैकपोर्ट के एंड्रॉइड संस्करण का उपयोग करते हैं। इसे थ्रीटेनबप कहा जाता है। और सुनिश्चित करें कि आप org.threeten.bpसबपेकेज से दिनांक और समय की कक्षाओं का आयात करते हैं ।

लिंक


1

एपीआई 26 और उससे अधिक वाले उपकरणों के लिए, आप इसे इस तरह प्राप्त कर सकते हैं:

ZonedDateTime.now().getZone().toString();

1

मेरे डिवाइस TimeZone.getDefault()पर हमेशा यूटीसी समय क्षेत्र लौट रहा है।

उपयोगकर्ता कॉन्फ़िगर समय क्षेत्र प्राप्त करने के लिए मुझे यह करने की आवश्यकता है:

TimeZone.setDefault(null)
val tz = TimeZone.getDefault()

यह उपयोगकर्ता को चयनित समयक्षेत्र लौटाएगा।


0

यहाँ सभी उत्तर दिवालिएपन पैरामीटर को असत्य पर सेट करने के लिए सुझाव देते हैं । यह कई टाइमज़ोन के लिए गलत है, जो संक्षिप्त नामों को वर्ष के समय के आधार पर बदलते हैं (जैसे ईएसटी बनाम ईडीटी)।

नीचे दिए गए समाधान से आपको टाइमज़ोन की वर्तमान तिथि के अनुसार सही संक्षिप्त नाम मिल जाएगा।

val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)

TimeZoneवर्ग खराब तरीके से तैयार है और लंबे समय पुराना है।
ओले वीवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.