我正在使用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
答案 0 :(得分:2)
Locale
指定Locale
匹配输入字符串的人类语言。在这种情况下,英语而不是西班牙语,Locale.English
。
如果省略,则会隐式应用JVM的当前默认语言环境。最好是明确的。 始终指定所需/期望的区域设置。在我看来,将locale参数设置为可选是API设计中的一个缺陷。
您的输入字符串恰好符合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 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。