无法解释的日期:“星期四,2016年10月13日21:06:31 +0200”(偏移8)

时间:2016-10-15 12:37:37

标签: java android date parsing locale

我正在使用this代码来解析Date,但在这种情况下,我的日期字符串如下:

  

Fri,2016年10月14日13:56:15 +0200

(西班牙西班牙)

不知道偏移量8,以及如何解决该解析错误。

PD:我已经尝试了this解决方案但没有成功。

我的代码......

public String convertDate(String d){

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm", new Locale("es"));
try
{

    Date date = simpleDateFormat.parse(d);
    return simpleDateFormat.format(date);
    //System.out.println("date : "+simpleDateFormat.format(date));
}
catch (ParseException ex)
{
    System.out.println("Exception "+ex);
}
return "Error en la fecha";

}

Logat

I/System.out: Exception java.text.ParseException: Unparseable date: "Fri, 14 Oct 2016 13:56:15 +0200" (at offset 0)
I/System.out: Exception java.text.ParseException: Unparseable date: "Thu, 13 Oct 2016 11:48:48 +0200" (at offset 0)
I/System.out: Exception java.text.ParseException: Unparseable date: "Wed, 12 Oct 2016 13:57:02 +0200" (at offset 0)
I/System.out: Exception java.text.ParseException: Unparseable date: "Thu, 13 Oct 2016 21:06:31 +0200" (at offset 0)

PD2:使用Android Studio

1 个答案:

答案 0 :(得分:2)

Locale

指定Locale 匹配输入字符串的人类语言。在这种情况下,英语而不是西班牙语,Locale.English

如果省略,则会隐式应用JVM的当前默认语言环境。最好是明确的。 始终指定所需/期望的区域设置。在我看来,将locale参数设置为可选是API设计中的一个缺陷。

RFC 1123& 822

您的输入字符串恰好符合RFC 1123和RFC 822的标准格式。

此格式由DateTimeFormatter.RFC_1123_DATE_TIME常量预定义。所以不需要定义格式化模式。

ZonedDateTime

你正在使用麻烦的旧日期时间类,现在是旧的,取而代之的是java.time类。

使用预定义的格式模式将输入字符串解析为ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.parse( 
    "Fri, 14 Oct 2016 13:56:15 +0200" , 
    DateTimeFormatter.RFC_1123_DATE_TIME 
);

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore