2016-09-07 62 views
2

分析异常,我试图用两套日期与日期格式:的SimpleDateFormat会因+0100

DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss"); 

它工作正常的日期:星期五,2016年8月26日十三时55分34秒+0000

不适用于日期:2016年9月6日星期二11:57:14 +0100

引发+0100日期的异常。

Unparseable date: "Tue, 06 Sep 2016 11:57:14 +0100" (at offset 0) 
at java.text.DateFormat.parse(DateFormat.java:555) 
+0

的SimpleDateFormat格式1 =新的SimpleDateFormat( “EEE,DD MMM YYYY HH:MM:SS Z”, Locale.ENGLISH);仍然抛出相同的错误 –

回答

4

它未能在offset 0,这意味着该问题不涉及到时区但对天信

您应该设置您的SimpleDateFormatLocale

DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH); 
    Date d1 = format.parse("Fri, 26 Aug 2016 13:55:34 +0000"); 
    Date d2 = format.parse("Tue, 06 Sep 2016 11:57:14 +0100"); 

工作没有任何问题。

如果您还需要检索时区,你还必须添加z到您的模式:

DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH); 
+1

Upvoted因为我偷了你的locale点,需要清除我的良心。 – Bathsheba

+0

SimpleDateFormat format1 = new SimpleDateFormat(“EEE,dd MMM yyyy HH:mm:ss z”,Locale.ENGLISH); 仍然无法正常工作。 –

+0

我的答案中的代码适合我! – YMomb

3

你需要

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 

注意z的时区。

如果未提供z解析器忽略零(+0000)的情况下,但不非零(+0100)的情况下。 lenient属性控制此行为(确认@Marko Topolnik)。

由于您使用的是英文周名,因此您应该使用双参数构造函数SimpleDateFormat,并将Locale.ENGLISH作为第二个参数传递。

+0

它仍然抛出相同的错误。我想在android –

+0

SimpleDateFormat format1 = new SimpleDateFormat(“EEE,dd MMM yyyy HH:mm:ss z”,Locale.ENGLISH); 仍然没有运气 –