2015-08-19 28 views
0

我试图将Date字符串转换为日期,但是SimpleDateFormat.parse在添加时间时不会返回任何内容。SimpleDateFormat解析不会返回任何时间

这是日期字符串:

String dateInString = news.getDate(); 
Log.e(TAG, "Date in String: " + dateInString); 

Date in String: 2015-08-19T06:21:59+01:00 //Result 

当我这样做:

DateFormat format 
      = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);   
Date date; 
    try { 

     date = format.parse(dateInString); 
     Log.e(TAG, "Formatted date: " + date); 


    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

我得到的结果是:Formatted date: Wed Aug 19 01:00:00 GMT+01:00 2015

如果我的时间增加的SimpleDateFormat:

DateFormat format 
     = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); 

代码甚至没有通过尝试,也没有抛出任何异常。没有任何打印。

我都试过,没有运气加上TimeZone

TimeZone timeZone = TimeZone.getTimeZone("UTC+01"); //also tried GMT+1:00, UTC+1:00 and UTC 
    DateFormat format 
      = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); 
    format.setTimeZone(timeZone); 

    try { 

     date = format.parse(dateInString); 
     Log.e(TAG, "Formatted date: " + date); 


    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

任何指针?

+0

'yyyy-MM-dd'T'HH:mm:ssXXX'模式应该适用于您的格式。并且设置时区可以省略,因为它在日期/时间字符串中定义。 –

+0

@SashaSalauyou我使用你的建议得到一个'java.lang.IllegalArgumentException:未知模式字符'X''。安迪的工作,但我不知道他为什么删除他的评论 –

+0

'X'是自Java 1.7以来的可用! –

回答

1

的sed的SimpleDataFormat的模式不正确,用这一个:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH); 

通知图案略有不同,我添加一件T文字分离的日期和时间,也是ZZZZZ它说,有时区那里。

+0

适用于我... –

0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX",Locale.ENGLISH); 

'X'标志自1.7开始可用,它代表时区。

所有可用的标志都在这里 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

+0

看看这个问题的意见 –

+0

请编辑更多的信息。仅限代码和“尝试这个”的答案是不鼓励的,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试这个”。我们在这里努力成为知识的资源。 –

0

描述我想有几种方法可以做到这一点。除了阿图罗的回答,这也适用:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.English);