2017-09-21 58 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); 
    } 
}