【问题标题】:Parse Date In Spanish error用西班牙语解析日期错误
【发布时间】:2017-09-21 05:12:13
【问题描述】:

您好,请帮帮我,我已经解决了很多问题,但没有得到解决方案。 代码

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)

【问题讨论】:

  • getString(R.string.jom_events_date_input_format_12_hrs)的值是多少
  • EEEE, dd MMMM yyyy hh:mm a,当我解析英文日期时,它可以完美运行
  • 我的默认语言环境也是“es”
  • 那么解析应该使用“p.m”。如果您的模式确实是“EEEE, dd MMMM yyyy hh:mm a”并且您使用宽松的解析(不区分大小写),而不是输入中的“PM”。请记住,您的错误消息指向偏移量 33,即“PM”部分的位置。
  • @MenoHochschild 更改为“下午”实际上工作它没有抛出错误,谢谢。

标签: java android date date-parsing


【解决方案1】:

仅作记录:

幸运的是,您发布了指向偏移量 33 的错误消息(即“PM”在您的输入中的位置)。所以我们可以说:

您的问题与设备相关的本地化数据(或操作系统相关)有关,这里是 AM/PM 西班牙语表示的具体数据。在旧版本的 CLDR-unicode 存储库(作为许多 Java-、C#- 或 Android 发行版的通用来源的行业标准)中,使用了数据“AM”和“PM”,但在较新的版本中,它使用了“a.m”。或“下午”西班牙语。

因此,如果您要解析的输入(包含“PM”)与您拥有的真实 i18n 数据不匹配,我建议作为实用的解决方案字符串预处理:

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

【讨论】:

    【解决方案2】:

    请检查此行的拼写

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

    更改 October 而不是 Octubre 并检查此 Miércoles

    【讨论】:

    • 它实际上是服务器生成的日期,谷歌翻译将其翻译为 2017 年 10 月 4 日星期三 12:00 PM
    • 对于西班牙语来说,月份名称和工作日名称是可以的(撇开它宁愿不大写但解析器不区分大小写 - 默认情况下宽松)。
    【解决方案3】:

    您可以参考此代码::

    此代码转换:--- miércoles,2017 年 10 月 4 日上午 12:00 至 2017 年 10 月 4 日星期三 00:00:00 IST

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 2022-11-20
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 2012-11-30
      相关资源
      最近更新 更多