2016-05-06 22 views
5
DateFormat formatter = new SimpleDateFormat("hh:mmaa"); 
formatter.parse("01:20pm") 

मैं 01:20 बजे के प्रारूप में समय का विश्लेषण करने की कोशिश कर रहा हूं। अगर मैं ऊपर कोड चलाने के लिए, मैं निम्नलिखित अपवाद:एचएच में सरल समय पार्सिंग: एमएमए प्रारूप

java.text.ParseException: Unparseable date: "01:20pm" 
    at java.text.DateFormat.parse(DateFormat.java:366) 

जहाँ तक प्रारूप मैं SimpleDateFormat निर्माता में डाल के रूप में, मैंने कुछ गलत नहीं दिख रहा। क्या गलत हुआ?

+2

हो सकता है यह स्थान मुद्दा है? डिफ़ॉल्ट रूप से आपका क्या है? Locale.US –

+0

पास करने का प्रयास करें जो आप जेडीके का उपयोग कर रहे हैं, यह जेडीके_1.8 –

+0

लॉर्ड के साथ बहुत बढ़िया काम करता है, यह एक लोकल मुद्दा था !!!! क्या .. पृथ्वी पर क्यों लोकल एक मुद्दा होगा? क्या वास्तव में अन्य लोकेशंस हैं जो एचएच का अर्थ है: एमएमए व्यापक रूप से अलग है? – Xiagua

उत्तर

7

आपके सिस्टम लोकेल को AM/PM पहचानना नहीं चाहिए। Locale का उपयोग करें जो करता है। कुछ की तरह,

DateFormat formatter = new SimpleDateFormat("hh:mmaa", Locale.US); 

या, जावा 8 में, जावा में

LocalTime lt = LocalTime.parse("01:20pm", 
     DateTimeFormatter.ofPattern("hh:mmaa", Locale.US)); 
+1

यह एक लोकेल मुद्दा था। जावा के लिए 10 अंक – Xiagua

1

संख्या और तारीख पार्स जैसे नए java.time एपीआई का उपयोग लोकेल निर्दिष्ट करने के लिए, ठीक है, भाषा-विशिष्ट प्रतीकों का उपयोग करता। इस मामले में, यह अधिकतर pm मान है जिसे अस्वीकार कर दिया जा रहा है।

इसकी पुष्टि करने के लिए, यहां वीएम में सभी उपलब्ध लोकेशंस का उपयोग करने के लिए कोड का एक टुकड़ा है।

उन लोगों के लिए जो काम नहीं करते हैं, मैं यह देखने के लिए उत्सुक था कि क्यों, एक समय को पार्स करने के बजाय, मैं इसके बजाय एक वैध समय प्रारूपित करता हूं। यूटीएफ -8 आउटपुट को सक्षम करना था, लेकिन यह देखना दिलचस्प है।

वाकई दिलचस्प बात यह है कि सभी स्पेनिश (es) स्थानों, को छोड़कर संयुक्त राज्य अमेरिका विविधता (es_US) ठीक काम करता है है। हममम ........

Set<String> good = new TreeSet<>(); 
Set<String> bad = new TreeSet<>(); 
for (Locale locale : Locale.getAvailableLocales()) { 
    try { 
     new SimpleDateFormat("hh:mmaa", locale).parse("01:20pm"); 
     good.add(locale.toLanguageTag()); 
    } catch (ParseException e) { 
     bad.add(locale.toLanguageTag()); 
    } 
} 
System.out.println("Good locales: " + good); 

Date time = new SimpleDateFormat("hh:mmaa", Locale.ENGLISH).parse("01:20pm"); 
System.out.println("Bad locales:"); 
for (String languageTag : bad) 
    System.out.printf(" %-5s: %s%n", languageTag, new SimpleDateFormat("hh:mmaa", Locale.forLanguageTag(languageTag)).format(time)); 

आउटपुट

Good locales: [be, be-BY, bg, bg-BG, ca, ca-ES, da, da-DK, de, de-AT, de-CH, de-DE, de-GR, de-LU, en, en-AU, en-CA, en-GB, en-IE, en-IN, en-MT, en-NZ, en-PH, en-SG, en-US, en-ZA, es, es-AR, es-BO, es-CL, es-CO, es-CR, es-CU, es-DO, es-EC, es-ES, es-GT, es-HN, es-MX, es-NI, es-PA, es-PE, es-PR, es-PY, es-SV, es-UY, es-VE, et, et-EE, fr, fr-BE, fr-CA, fr-CH, fr-FR, fr-LU, he, he-IL, hi, hr, hr-HR, id, id-ID, is, is-IS, it, it-CH, it-IT, lt, lt-LT, lv, lv-LV, mk, mk-MK, ms, ms-MY, nl, nl-BE, nl-NL, nn-NO, no, no-NO, pl, pl-PL, pt, pt-BR, pt-PT, ro, ro-RO, ru, ru-RU, sk, sk-SK, sl, sl-SI, sr, sr-BA, sr-CS, sr-Latn, sr-Latn-BA, sr-Latn-ME, sr-Latn-RS, sr-ME, sr-RS, tr, tr-TR, uk, uk-UA, und] 
Bad locales: 
    ar : 01:20م 
    ar-AE: 01:20م 
    ar-BH: 01:20م 
    ar-DZ: 01:20م 
    ar-EG: 01:20م 
    ar-IQ: 01:20م 
    ar-JO: 01:20م 
    ar-KW: 01:20م 
    ar-LB: 01:20م 
    ar-LY: 01:20م 
    ar-MA: 01:20م 
    ar-OM: 01:20م 
    ar-QA: 01:20م 
    ar-SA: 01:20م 
    ar-SD: 01:20م 
    ar-SY: 01:20م 
    ar-TN: 01:20م 
    ar-YE: 01:20م 
    cs : 01:20odp. 
    cs-CZ: 01:20odp. 
    el : 01:20μμ 
    el-CY: 01:20ΜΜ 
    el-GR: 01:20μμ 
    es-US: 01:20p.m. 
    fi : 01:20ip. 
    fi-FI: 01:20ip. 
    ga : 01:20p.m. 
    ga-IE: 01:20p.m. 
    hi-IN: ०१:२०अपराह्न 
    hu : 01:20DU 
    hu-HU: 01:20DU 
    ja : 01:20午後 
    ja-JP: 01:20午後 
    ja-JP-u-ca-japanese-x-lvariant-JP: 01:20午後 
    ko : 01:20오후 
    ko-KR: 01:20오후 
    mt : 01:20WN 
    mt-MT: 01:20WN 
    sq : 01:20MD 
    sq-AL: 01:20MD 
    sv : 01:20em 
    sv-SE: 01:20em 
    th : 01:20หลังเที่ยง 
    th-TH: 01:20หลังเที่ยง 
    th-TH-u-nu-thai-x-lvariant-TH: ๐๑:๒๐หลังเที่ยง 
    vi : 01:20CH 
    vi-VN: 01:20CH 
    zh : 01:20下午 
    zh-CN: 01:20下午 
    zh-HK: 01:20下午 
    zh-SG: 01:20下午 
    zh-TW: 01:20下午 
संबंधित मुद्दे