2013-05-15 61 views
7

我需要將日期解析爲11種不同的語言。到目前爲止,只有兩個給我帶來麻煩:德國和烏克蘭。java.text.ParseException:不可解析日期(德語,烏克蘭語)

package com.example; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

public class TestDate { 

    private static SimpleDateFormat DATE_SDF; 

    public static void main(String[] args) { 
     // German 
     DATE_SDF = new SimpleDateFormat("dd MMM yyyy", Locale.GERMAN); 
     DATE_SDF.setLenient(false); 
     String[] germanDate = {"11 Jan 1970", "11 Feb 1970", "11 Mär 1970", 
       "11 Apr 1970", "11 Mai 1970", "11 Jun 1970", 
       "11 Jul 1970", "11 Aug 1970", "11 Sep 1970", 
       "11 Okt 1970", "11 Nov 1970", "11 Dez 1970"}; 
     for (String germanDateIterator: germanDate) { 
      try { 
       Date parsedGermanDate = DATE_SDF.parse(germanDateIterator); 
       System.out.println("parsedGermanDate:" + parsedGermanDate); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 

     // Ukrainian 
     DATE_SDF = new SimpleDateFormat("dd MMM yyyy", new Locale("uk")); 
     DATE_SDF.setLenient(false); 
     String[] ukDate = {"11 Січ 1970", "11 Лют 1970", "11 Бер 1970", 
       "11 Кві 1970", "11 Тра 1970", "11 Чер 1970", 
       "11 Лип 1970", "11 Сер 1970", "11 Вер 1970", 
       "11 Жов 1970", "11 Лис 1970", "11 Гру 1970"}; 
     for (String ukDateIterator: ukDate) { 
      try { 
       Date parsedUkDate = DATE_SDF.parse(ukDateIterator); 
       System.out.println("parsedUkrainianDate:" + parsedUkDate); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

輸出爲這個測試是:

parsedGermanDate:Sun Jan 11 00:00:00 MST 1970 
parsedGermanDate:Wed Feb 11 00:00:00 MST 1970 
java.text.ParseException: Unparseable date: "11 Mär 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:19) 
parsedGermanDate:Sat Apr 11 00:00:00 MST 1970 
parsedGermanDate:Mon May 11 00:00:00 MDT 1970 
parsedGermanDate:Thu Jun 11 00:00:00 MDT 1970 
parsedGermanDate:Sat Jul 11 00:00:00 MDT 1970 
parsedGermanDate:Tue Aug 11 00:00:00 MDT 1970 
parsedGermanDate:Fri Sep 11 00:00:00 MDT 1970 
parsedGermanDate:Sun Oct 11 00:00:00 MDT 1970 
parsedGermanDate:Wed Nov 11 00:00:00 MST 1970 
parsedGermanDate:Fri Dec 11 00:00:00 MST 1970 
parsedUkrainianDate:Sun Jan 11 00:00:00 MST 1970 
parsedUkrainianDate:Wed Feb 11 00:00:00 MST 1970 
parsedUkrainianDate:Wed Mar 11 00:00:00 MST 1970 
java.text.ParseException: Unparseable date: "11 Кві 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
java.text.ParseException: Unparseable date: "11 Тра 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
java.text.ParseException: Unparseable date: "11 Чер 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
parsedUkrainianDate:Sat Jul 11 00:00:00 MDT 1970 
java.text.ParseException: Unparseable date: "11 Сер 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
parsedUkrainianDate:Fri Sep 11 00:00:00 MDT 1970 
java.text.ParseException: Unparseable date: "11 Жов 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
java.text.ParseException: Unparseable date: "11 Лис 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 
java.text.ParseException: Unparseable date: "11 Гру 1970" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.example.TestDate.main(TestDate.java:32) 

爲什麼說一些工作和別人不一樣?我能做些什麼來讓他們都能工作?我正在使用Java版本「1.7.0_11」。


我調整,即assylias提供給適合我的原始示例代碼:

package com.example; 

import java.io.IOException; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.List; 
import java.util.Locale; 

public class TestDate { 

    public static void main(String[] args) throws IOException { 
     List<Locale> localeList = new ArrayList<Locale>(); 
     localeList.add(new Locale("de")); 
     localeList.add(new Locale("en")); 
     localeList.add(new Locale("es")); 
     localeList.add(new Locale("fr")); 
     localeList.add(new Locale("it")); 
     localeList.add(new Locale("pt")); 
     localeList.add(new Locale("ru")); 
     localeList.add(new Locale("uk")); 
     localeList.add(new Locale("ko")); 
     localeList.add(new Locale("ja")); 
     localeList.add(new Locale("zh")); 
     for (Locale currentLocale : localeList) { 
      DateFormat df; 
      SimpleDateFormat DATE_SDF; 
      if (currentLocale.toString().equals("ja")) { 
       df = new SimpleDateFormat("MMMM", currentLocale); 
       DATE_SDF = new SimpleDateFormat("dd MMMM yyyy", currentLocale); 
      } else { 
       df = new SimpleDateFormat("MMM", currentLocale); 
       DATE_SDF = new SimpleDateFormat("dd MMM yyyy", currentLocale); 
      } 
      Calendar cal = Calendar.getInstance(); 
      for (int i = 0; i < 12; i++) { 
       cal.set(Calendar.MONTH, i); 
       String dateString = "11 " + df.format(cal.getTime()) + " 1970"; 
       Date parsedDate = null; 
       try { 
        parsedDate = DATE_SDF.parse(dateString); 
       } catch (ParseException e) { 
        e.printStackTrace(); 
       } 
       System.out.println("parsedDate " + currentLocale + " (" + df.format(cal.getTime()) + "):" + parsedDate); 
      } 
     } 
    } 
} 

這是結果:

parsedDate de (Jan):Sun Jan 11 00:00:00 MST 1970 
parsedDate de (Feb):Wed Feb 11 00:00:00 MST 1970 
parsedDate de (Mrz):Wed Mar 11 00:00:00 MST 1970 
parsedDate de (Apr):Sat Apr 11 00:00:00 MST 1970 
parsedDate de (Mai):Mon May 11 00:00:00 MDT 1970 
parsedDate de (Jun):Thu Jun 11 00:00:00 MDT 1970 
parsedDate de (Jul):Sat Jul 11 00:00:00 MDT 1970 
parsedDate de (Aug):Tue Aug 11 00:00:00 MDT 1970 
parsedDate de (Sep):Fri Sep 11 00:00:00 MDT 1970 
parsedDate de (Okt):Sun Oct 11 00:00:00 MDT 1970 
parsedDate de (Nov):Wed Nov 11 00:00:00 MST 1970 
parsedDate de (Dez):Fri Dec 11 00:00:00 MST 1970 
parsedDate en (Jan):Sun Jan 11 00:00:00 MST 1970 
parsedDate en (Feb):Wed Feb 11 00:00:00 MST 1970 
parsedDate en (Mar):Wed Mar 11 00:00:00 MST 1970 
parsedDate en (Apr):Sat Apr 11 00:00:00 MST 1970 
parsedDate en (May):Mon May 11 00:00:00 MDT 1970 
parsedDate en (Jun):Thu Jun 11 00:00:00 MDT 1970 
parsedDate en (Jul):Sat Jul 11 00:00:00 MDT 1970 
parsedDate en (Aug):Tue Aug 11 00:00:00 MDT 1970 
parsedDate en (Sep):Fri Sep 11 00:00:00 MDT 1970 
parsedDate en (Oct):Sun Oct 11 00:00:00 MDT 1970 
parsedDate en (Nov):Wed Nov 11 00:00:00 MST 1970 
parsedDate en (Dec):Fri Dec 11 00:00:00 MST 1970 
parsedDate es (ene):Sun Jan 11 00:00:00 MST 1970 
parsedDate es (feb):Wed Feb 11 00:00:00 MST 1970 
parsedDate es (mar):Wed Mar 11 00:00:00 MST 1970 
parsedDate es (abr):Sat Apr 11 00:00:00 MST 1970 
parsedDate es (may):Mon May 11 00:00:00 MDT 1970 
parsedDate es (jun):Thu Jun 11 00:00:00 MDT 1970 
parsedDate es (jul):Sat Jul 11 00:00:00 MDT 1970 
parsedDate es (ago):Tue Aug 11 00:00:00 MDT 1970 
parsedDate es (sep):Fri Sep 11 00:00:00 MDT 1970 
parsedDate es (oct):Sun Oct 11 00:00:00 MDT 1970 
parsedDate es (nov):Wed Nov 11 00:00:00 MST 1970 
parsedDate es (dic):Fri Dec 11 00:00:00 MST 1970 
parsedDate fr (janv.):Sun Jan 11 00:00:00 MST 1970 
parsedDate fr (févr.):Wed Feb 11 00:00:00 MST 1970 
parsedDate fr (mars):Wed Mar 11 00:00:00 MST 1970 
parsedDate fr (avr.):Sat Apr 11 00:00:00 MST 1970 
parsedDate fr (mai):Mon May 11 00:00:00 MDT 1970 
parsedDate fr (juin):Thu Jun 11 00:00:00 MDT 1970 
parsedDate fr (juil.):Sat Jul 11 00:00:00 MDT 1970 
parsedDate fr (août):Tue Aug 11 00:00:00 MDT 1970 
parsedDate fr (sept.):Fri Sep 11 00:00:00 MDT 1970 
parsedDate fr (oct.):Sun Oct 11 00:00:00 MDT 1970 
parsedDate fr (nov.):Wed Nov 11 00:00:00 MST 1970 
parsedDate fr (déc.):Fri Dec 11 00:00:00 MST 1970 
parsedDate it (gen):Sun Jan 11 00:00:00 MST 1970 
parsedDate it (feb):Wed Feb 11 00:00:00 MST 1970 
parsedDate it (mar):Wed Mar 11 00:00:00 MST 1970 
parsedDate it (apr):Sat Apr 11 00:00:00 MST 1970 
parsedDate it (mag):Mon May 11 00:00:00 MDT 1970 
parsedDate it (giu):Thu Jun 11 00:00:00 MDT 1970 
parsedDate it (lug):Sat Jul 11 00:00:00 MDT 1970 
parsedDate it (ago):Tue Aug 11 00:00:00 MDT 1970 
parsedDate it (set):Fri Sep 11 00:00:00 MDT 1970 
parsedDate it (ott):Sun Oct 11 00:00:00 MDT 1970 
parsedDate it (nov):Wed Nov 11 00:00:00 MST 1970 
parsedDate it (dic):Fri Dec 11 00:00:00 MST 1970 
parsedDate pt (Jan):Sun Jan 11 00:00:00 MST 1970 
parsedDate pt (Fev):Wed Feb 11 00:00:00 MST 1970 
parsedDate pt (Mar):Wed Mar 11 00:00:00 MST 1970 
parsedDate pt (Abr):Sat Apr 11 00:00:00 MST 1970 
parsedDate pt (Mai):Mon May 11 00:00:00 MDT 1970 
parsedDate pt (Jun):Thu Jun 11 00:00:00 MDT 1970 
parsedDate pt (Jul):Sat Jul 11 00:00:00 MDT 1970 
parsedDate pt (Ago):Tue Aug 11 00:00:00 MDT 1970 
parsedDate pt (Set):Fri Sep 11 00:00:00 MDT 1970 
parsedDate pt (Out):Sun Oct 11 00:00:00 MDT 1970 
parsedDate pt (Nov):Wed Nov 11 00:00:00 MST 1970 
parsedDate pt (Dez):Fri Dec 11 00:00:00 MST 1970 
parsedDate ru (янв):Sun Jan 11 00:00:00 MST 1970 
parsedDate ru (фев):Wed Feb 11 00:00:00 MST 1970 
parsedDate ru (мар):Wed Mar 11 00:00:00 MST 1970 
parsedDate ru (апр):Sat Apr 11 00:00:00 MST 1970 
parsedDate ru (май):Mon May 11 00:00:00 MDT 1970 
parsedDate ru (июн):Thu Jun 11 00:00:00 MDT 1970 
parsedDate ru (июл):Sat Jul 11 00:00:00 MDT 1970 
parsedDate ru (авг):Tue Aug 11 00:00:00 MDT 1970 
parsedDate ru (сен):Fri Sep 11 00:00:00 MDT 1970 
parsedDate ru (окт):Sun Oct 11 00:00:00 MDT 1970 
parsedDate ru (ноя):Wed Nov 11 00:00:00 MST 1970 
parsedDate ru (дек):Fri Dec 11 00:00:00 MST 1970 
parsedDate uk (січ):Sun Jan 11 00:00:00 MST 1970 
parsedDate uk (лют):Wed Feb 11 00:00:00 MST 1970 
parsedDate uk (бер):Wed Mar 11 00:00:00 MST 1970 
parsedDate uk (квіт):Sat Apr 11 00:00:00 MST 1970 
parsedDate uk (трав):Mon May 11 00:00:00 MDT 1970 
parsedDate uk (черв):Thu Jun 11 00:00:00 MDT 1970 
parsedDate uk (лип):Sat Jul 11 00:00:00 MDT 1970 
parsedDate uk (серп):Tue Aug 11 00:00:00 MDT 1970 
parsedDate uk (вер):Fri Sep 11 00:00:00 MDT 1970 
parsedDate uk (жовт):Sun Oct 11 00:00:00 MDT 1970 
parsedDate uk (лист):Wed Nov 11 00:00:00 MST 1970 
parsedDate uk (груд):Fri Dec 11 00:00:00 MST 1970 
parsedDate ko (1월):Sun Jan 11 00:00:00 MST 1970 
parsedDate ko (2월):Wed Feb 11 00:00:00 MST 1970 
parsedDate ko (3월):Wed Mar 11 00:00:00 MST 1970 
parsedDate ko (4월):Sat Apr 11 00:00:00 MST 1970 
parsedDate ko (5월):Mon May 11 00:00:00 MDT 1970 
parsedDate ko (6월):Thu Jun 11 00:00:00 MDT 1970 
parsedDate ko (7월):Sat Jul 11 00:00:00 MDT 1970 
parsedDate ko (8월):Tue Aug 11 00:00:00 MDT 1970 
parsedDate ko (9월):Fri Sep 11 00:00:00 MDT 1970 
parsedDate ko (10월):Sun Oct 11 00:00:00 MDT 1970 
parsedDate ko (11월):Wed Nov 11 00:00:00 MST 1970 
parsedDate ko (12월):Fri Dec 11 00:00:00 MST 1970 
parsedDate ja (1月):Sun Jan 11 00:00:00 MST 1970 
parsedDate ja (2月):Wed Feb 11 00:00:00 MST 1970 
parsedDate ja (3月):Wed Mar 11 00:00:00 MST 1970 
parsedDate ja (4月):Sat Apr 11 00:00:00 MST 1970 
parsedDate ja (5月):Mon May 11 00:00:00 MDT 1970 
parsedDate ja (6月):Thu Jun 11 00:00:00 MDT 1970 
parsedDate ja (7月):Sat Jul 11 00:00:00 MDT 1970 
parsedDate ja (8月):Tue Aug 11 00:00:00 MDT 1970 
parsedDate ja (9月):Fri Sep 11 00:00:00 MDT 1970 
parsedDate ja (10月):Sun Oct 11 00:00:00 MDT 1970 
parsedDate ja (11月):Wed Nov 11 00:00:00 MST 1970 
parsedDate ja (12月):Fri Dec 11 00:00:00 MST 1970 
parsedDate zh (一月):Sun Jan 11 00:00:00 MST 1970 
parsedDate zh (二月):Wed Feb 11 00:00:00 MST 1970 
parsedDate zh (三月):Wed Mar 11 00:00:00 MST 1970 
parsedDate zh (四月):Sat Apr 11 00:00:00 MST 1970 
parsedDate zh (五月):Mon May 11 00:00:00 MDT 1970 
parsedDate zh (六月):Thu Jun 11 00:00:00 MDT 1970 
parsedDate zh (七月):Sat Jul 11 00:00:00 MDT 1970 
parsedDate zh (八月):Tue Aug 11 00:00:00 MDT 1970 
parsedDate zh (九月):Fri Sep 11 00:00:00 MDT 1970 
parsedDate zh (十月):Sun Oct 11 00:00:00 MDT 1970 
parsedDate zh (十一月):Wed Nov 11 00:00:00 MST 1970 
parsedDate zh (十二月):Fri Dec 11 00:00:00 MST 1970 

一切工作。現在我只需要調整我的JQuery日期格式和翻譯以匹配。我必須將for循環中的迭代長度從11更新爲12以包含12月。 謝謝assylias!

+0

某種類型的編碼問題。我不知道除了俄羅斯字符是什麼造成問題外 – Coffee

+0

使用相同的日期DATE_SDF格式化日期並查看它生成的內容。這樣你就可以看到它在分析時的期望。 –

+0

您不是將日期解析爲不同的語言,而是將包含不同語言日期的字符串解析爲日期。該錯誤看起來是自描述性的:日期不能被解析,可能是由於錯誤的月份名稱。 –

回答

7

這些都不是有效的日期 - 試試這段代碼得到適當的短月份名稱。所以你會注意到,四月是Квіт,而不是Кві,例如。至於德國,3月應該是Mrz,而不是März

public static void main(String[] args) throws IOException { 
    Locale ukLocale = new Locale("uk"); 
    DateFormat df = new SimpleDateFormat("MMM", ukLocale); 
    Calendar cal = Calendar.getInstance(); 
    for (int i = 0; i < 11; i++) { 
     cal.set(Calendar.MONTH, i); 
     System.out.println(df.format(cal.getTime())); 
    } 
} 

,輸出:

січ 
лют 
бер 
квіт 
трав 
черв 
лип 
серп 
вер 
жовт 
лист 
相關問題