Nummer und Datum Parsing in Java verwendet das Locale angeben, na ja, länderspezifische Symbole. In diesem Fall wird meistens der Wert pm
abgelehnt.
Um dies zu bestätigen, ist hier ein Codeabschnitt, um alle verfügbaren Gebietsschemas in der VM auszuüben.
Für Locales, die nicht funktionieren, war ich neugierig zu sehen, warum, also statt eine Zeit zu analysieren, formatiere ich stattdessen eine gültige Zeit. Musste die UTF-8-Ausgabe aktivieren, aber es ist interessant zu sehen.
Der wirklich interessante Teil ist, dass all Spanisch (es
) locales, außer die Vereinigten Staaten Variante (es_US
) funktioniert gut. Hmmm ........
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));
OUTPUT
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下午
Vielleicht ist es locale Problem ist? Was ist dein Standard? Versuchen Sie, Locale.US –
zu übergeben, welche Version von JDK verwenden Sie, das funktioniert ziemlich gut mit JDK_1.8 –
Herr, war es ein lokales Problem !!!! Was zum .. Warum in aller Welt wäre hier ein Problem? Gibt es tatsächlich andere Locales, die hh interpretieren: mmaa sehr unterschiedlich? – Xiagua