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

Saat 13: 20'de biçimlendirmeye çalışıyorum. Yukarıdaki kod çalıştırırsanız, ben şu istisna olsun: Basit zamanları hh olarak ayrıştırma: mmaa biçimi

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

Bildiğim kadarıyla SimpleDateFormat yapıcı koymak biçimi olarak, yanlış bir şey görmüyorum. Burada yanlış olan neydi?

+2

o yerel bir mesele olabilir? Varsayılan olarak nedir? Locale.US –

+0

hangi JDK sürümünü kullanıyorsunuz, bu JDK_1.8 –

+0

Lord ile oldukça iyi çalışıyor, bu bir yerel sorun oldu !! Ne… Neden yeryüzünde yeryüzü buradaki bir sorun olurdu? Aslında hh: mmaa'yı farklı şekilde yorumlayan başka yereller var mı? – Xiagua

cevap

7

Sistem yerel ayarınız, AM/PM tanımamalıdır. Bunu yapan bir Locale kullanın. Java 8+ içinde bir şey gibi

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

Veya, iyi, yerele özgü sembolleri belirtmek için Yerel Ayar kullanan Java

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

Yerel bir sorun oldu. JAVA İÇİN 10 PUAN – Xiagua

1

sayısı ve tarih ayrıştırma gibi yeni java.time API kullanmak. Bu durumda, çoğunlukla reddedilen pm değeridir.

Bunu doğrulamak için, sanal makinedeki tüm yerel ayarları kullanabilmek için bir kod parçası verilmiştir.

Çalışmıyor olan yerel kullanıcılar için nedenini merak ettim, bu yüzden bir zamanı ayrıştırmak yerine, geçerli bir saati biçimlendiriyorum. UTF-8 çıkışını etkinleştirmek zorundaydı, ancak görmek ilginç.

gerçekten ilginç kısmı

bütün İspanyolca ( es) yerel ayarlar, hariç Birleşik Devletleri varyantı (es_US) çalışıyor olması. 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)); 

ÇIKIŞ

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下午 
İlgili konular