2013-04-12 10 views
6

मेरे ऐप में मेरे पास निश्चित समय के लिए निष्पादन रोकने का विकल्प है। मैं उस समय को दिखाना चाहता हूं जब निष्पादन फिर से शुरू हो जाएगा, सेकंड सहित, और मैं चाहता हूं कि टाइम स्ट्रिंग को निरंतर सेटिंग्स के अनुसार स्वरूपित किया जाए। इस कोड को मैं के साथ आया है:SimpleDateFormat.getTimeInstance 24 घंटे के प्रारूप को अनदेखा करता है

long millis = getResumeTime(); 
String timeString; 
timeString = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(millis); 

यह सेकंड के साथ एक स्वरूपित स्ट्रिंग का उत्पादन करता है, लेकिन यह AM/PM प्रारूपित समय देता है, भले ही मैं सेटिंग्स में 24 घंटे समय स्वरूप निर्धारित किया है। यह भी मजेदार है क्योंकि सिस्टम ट्रे में समय 24 घंटे प्रारूप का उपयोग करके सही ढंग से स्वरूपित किया जाता है।

मैं इस तरह DateFormat.getTimeFormat उपयोग करने की कोशिश:

long millis = getResumeTime(); 
String timeString; 
java.text.DateFormat df = android.text.format.DateFormat.getTimeFormat(this); 
timeString = df.format(millis); 

लेकिन जिसके परिणामस्वरूप स्ट्रिंग सेकंड शामिल नहीं है, और मैं एक तरह से उन्हें शामिल करने के लिए नहीं दिख रहा।

मैं एंड्रॉइड 4.2 एमुलेटर पर यह कोड चला रहा हूं। क्या मुझसे कोई चूक हो रही है? क्या SimpleDateFormat 12/24 घंटे की सेटिंग के बारे में पता नहीं है? यदि नहीं, तो मैं सिस्टम प्रारूप में समय की एक स्ट्रिंग प्रस्तुति (घंटे, मिनट और सेकंड सहित) कैसे प्राप्त करूं?

+0

डुप्लिकेट? http://stackoverflow.com/questions/9235934/get-preferred-date-format-string-of-android-system –

+0

नहीं। वे दिनांक प्रारूप पर चर्चा करते हैं। मुझे समय प्रारूप में रूचि है। दुर्भाग्यवश वे हमेशा एक ही तरीके से काम नहीं करते हैं। –

+0

यदि आप getDateFormat 'android.text.format.DateFormat.getTimeFormat (getApplicationContext()) के लिए GetTimeFormat को प्रतिस्थापित करते हैं)'? –

उत्तर

2

यह बहुत अच्छी तरह से निर्भर हो सकता है कि आपका सिस्टम किस लोकेल में है। यदि आपका सिस्टम यूएस में है, तो यह 24h के बजाय 12h तक डिफ़ॉल्ट होगा। अर्थात

long millis = new Date().getTime(); 
String uk = SimpleDateFormat 
       .getTimeInstance(SimpleDateFormat.MEDIUM, Locale.UK) 
       .format(millis); 
String us = SimpleDateFormat 
       .getTimeInstance(SimpleDateFormat.MEDIUM, Locale.US) 
       .format(millis); 
System.out.println("UK: " + uk); 
System.out.println("US: " + us); 

आप

UK: 16:19:49 
US: 4:19:49 PM 

दे देंगे तो, शायद आप सिस्टम स्थान हड़पने और अपने फ़ॉर्मेटर में यह निर्दिष्ट कर सकते हैं।

हालांकि, अगर आप इसे 24h प्रारूप में हमेशा चाहते हैं, तो मेरा सुझाव है कि आप इसे अपने फॉर्मेटर में स्पष्ट रूप से निर्दिष्ट करें।

अद्यतन: जब से तुम समय डिवाइस विनिर्देश के आधार पर प्रारूप हड़पने के लिए चाहता था, आप सिस्टम के Time_12_24 मान का उपयोग और जिसके परिणामस्वरूप मूल्य से अपने प्रारूप निर्धारित कर सकते हैं।

+1

"मेरा सुझाव है कि आप इसे अपने फॉर्मेटर में स्पष्ट रूप से निर्दिष्ट करें" - यह निश्चित रूप से एक विकल्प है, लेकिन मुझे आशा थी कि एक विधि पहले से ही उपलब्ध हो सकती है जो स्वचालित रूप से उपलब्ध हो सकती है :) –

+0

यह सुझाव केवल तभी होता था जब आप चाहते हैं- हमेशा प्रदर्शित करें 24 एच प्रारूप। बेशक, आप हमेशा JVM के डिफ़ॉल्ट लोकेल का उपयोग कर सकते हैं और इसे "स्वचालित रूप से" डिस्प्ले प्रारूप निर्धारित कर सकते हैं। – dispake

+1

मैं नहीं चाहता- हमेशा 24 घंटे का प्रारूप प्रदर्शित करता हूं, लेकिन यदि उपयोगकर्ता ने अपने डिवाइस की सेटिंग्स में उपयुक्त चेकबॉक्स चेक किया है तो मैं 24 घंटे का प्रारूप प्रदर्शित करना चाहता हूं। यदि उपयोगकर्ता लोकेल.यूएस है तो इसमें मामले शामिल हैं। तो मान लें कि मेरे पास दो मामले हैं: (1) लोकेल.यूएस और 24 घंटे चेकबॉक्स अनचाहे, (2) लोकेल.यूएस और 24 घंटे चेकबॉक्स की जांच की गई। दोनों मामलों में SimpleDateFormat.getTimeInstance 24 घंटे सिस्टम सेटिंग को अनदेखा करते हुए, AM/PM प्रारूप में घंटे देता है। –

0

आपको शायद अपना खुद का प्रारूप पैटर्न बनाना चाहिए। अगर मुझे सही याद है, तो आप जिस पैटर्न का उपयोग करेंगे, वह है "एचएच: एमएम: एस.एस.एस.एस.एस." आपको घंटे, मिनट, सेकंड, और तीन अंकों के अंशकालिक परिशुद्धता देने के लिए।

SimpleDateFormat के लिए API संदर्भ दस्तावेज़ देखें।

1
String timestamp = (DateFormat.format("yyyy.MM.dd kk:mm:ss", new Date())).toString(); 

एचएच के बजाय, केके का उपयोग करें।

5

आसान समाधान है:

String timeString = DateUtils.formatDateTime(getContext(), timeInMillis, 
      DateUtils.FORMAT_SHOW_TIME); 

यह सही ढंग से 12/24 घंटे उपयोगकर्ता सेटिंग संभालती है।

2

वहाँ जहां DateFormat#getTimeInstance(int) रिटर्न एक DateFormat कि उपयोग 24-घंटा प्रारूप सेटिंग पर ध्यान नहीं देता 6.0.1 के लिए Android 5 में एक बग हो रहा है। अन्य उत्तरों इस बग के लिए विभिन्न प्रकार के कामकाज का जिक्र करते हैं। आप https://code.google.com/p/android/issues/detail?id=181201 पर इस मुद्दे का पालन कर सकते हैं।

संबंधित मुद्दे