【问题标题】:Unparseable date: "Thu, 13 Oct 2016 21:06:31 +0200" (at offset 8)无法解析的日期:“Thu, 13 Oct 2016 21:06:31 +0200”(偏移量 8)
【发布时间】:2016-10-15 12:37:37
【问题描述】:

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

2016 年 10 月 14 日星期五 13:56:15 +0200

(西班牙西班牙)

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

PD:我也尝试过this 解决方案,但没有成功。

我的代码....

公共字符串转换日期(字符串 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";

}

登录

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

【问题讨论】:

  • 请在此处显示您的代码minimal reproducible example
  • Fri 和 Oct 是英语。
  • 不确定,但偏移量 8 可能指的是字符串中(从 0 开始的)位置 8,即 Oct 中的大写字母 O。似乎证实 @ElliottFrisch 走在了正确的轨道上。
  • @Mark 这里显示的是你自己的代码,不是链接,也不是别人的代码
  • @Mark 您的标题显示偏移量 8,但您的示例错误代码显示偏移量 0。起草问题时请小心。使用“编辑”链接或按钮进行修复。

标签: java android date parsing locale


【解决方案1】:

Locale

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

如果省略,则隐式应用 JVM 的当前默认语言环境。最好是明确的。 始终指定您想要/预期的语言环境。在我看来,将语言环境参数设为可选是 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-Time 项目现在位于 maintenance mode,建议迁移到 java.time。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。

【讨论】:

  • 对不起,我没有说明我用的是Android Studio,所以没有ZonedDateTime
  • @Mark 将ThreeTenABP 库添加到您的项目中,这是ThreeTen-Backport 项目的Android 改编版本。大部分 java.time 功能都向后移植到 Java 6 和 7。非常值得费心,因为旧的日期时间类是一团糟。
猜你喜欢
  • 2015-06-04
  • 2014-07-24
  • 2015-02-16
  • 2015-02-07
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多