2017-09-21 81 views
1

你好,請幫助我,我已經經歷了很多問題,但沒有得到解決方案。 代碼解析日期西班牙語錯誤

String localDate1="Miércoles, 04 Octubre 2017 12:00 PM"; 
Locale spanishLocale=new Locale("es", "ES"); 
SimpleDateFormat spanishLocale1=new SimpleDateFormat(getString(R.string.jom_events_date_input_format_12_hrs),spanishLocale); 
String dateInSpanish=spanishLocale1.parse(localDate1).toString(); 
Log.v("@@@WWW","in Spanish: "+dateInSpanish); 

錯誤

java.text.ParseException: Unparseable date: "Miércoles, 04 Octubre 2017 12:00 PM" (at offset 33) 
+0

什麼是'值getString(R.string.jom_events_date_input_format_12_hrs)' –

+0

EEEE,dd MMMM yyyy hh:mm a,當我解析englisn日期它的工作原理雖然 –

+0

我的默認語言環境也是「es」 –

回答

2

只是爲了記錄:

你已經幸運地貼指向您的錯誤信息的偏移33(也就是在你輸入「PM」的位置)。因此,我們可以陳述:

您的問題與設備相關的本地化數據(或OS相關)有關,這裏是AM/PM西班牙語表示的具體數據。在舊版本的CLDR-unicode存儲庫(工業標準作爲許多Java,C#或Android發行版的通用源代碼)中,使用了數據「AM」和「PM」,但在新版本中使用「a。m」。或「p.m」。爲西班牙語。

因此,在你輸入之間不匹配的情況下被解析(含「PM」)和實際國際化數據,你有,我建議作爲務實的解決方案字符串預處理:

String input = "Miércoles, 04 Octubre 2017 12:00 PM"; 
input = input.replace("PM", "p. m."); 
// now parse your input with Spanish locale and the appropriate pattern 
+0

爲我工作非常感謝 –

0

請檢查你在這一行拼寫

String localDate1="Miércoles, 04 Octubre 2017 12:00 PM"; 

變化代替OCTUBRE,並檢查該Miércoles

+0

它實際上是服務器生成的日期,谷歌翻譯翻譯它到2017年10月4日星期三12:00 PM –

+0

西班牙語的月份名稱和星期幾名稱是可以的(撇開它不會被大寫,但解析器不區分大小寫 - 默認情況下爲寬鬆)。 –

-1

您可以使用此代碼,以供大家參考::

該代碼轉換:--- miércoles,04 OCTUBRE 2017年12:00 AM 到 週三10月4日00:00:00北京時間2017年

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

public class test { 

    public static void main(String[] args) throws IOException, ParseException { 
     //Wednesday, October 4, 2017 
     String dateInString = "4-Oct-2017"; 
     SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); 
     Date date = formatter.parse(dateInString); 

     SimpleDateFormat formato = new SimpleDateFormat("EEEE, dd MMMM yyyy hh:mm aaaa", new Locale("es", "ES")); 
     String fecha = formato.format(date); 
     System.out.println(fecha); 

     String localDate1 = fecha; 
     Locale spanishLocale = new Locale("es", "ES"); 
     String pattern = "E, dd MMMM yyyy hh:mm aaaa"; 
     SimpleDateFormat spanishLocale1 = new SimpleDateFormat(pattern, spanishLocale); 
     String dateInSpanish = spanishLocale1.parse(localDate1).toString(); 
     System.out.println(dateInSpanish); 
    } 
}