2013-04-06 257 views
2

我有一个类型为“2013-03-28T15:16:58.000Z”的日期值。我想将它转换为“dd-MMM-yyyy”格式。对于这一点,我已经使用了下面的代码:SimpleDateFormat解析返回null

public static String getTime(String time) 
{ 
    try 
    {   
     String tim = time.replace("T", " "); 
     SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.US); 
     SimpleDateFormat df2 = new SimpleDateFormat("dd-MMM-yyyy", Locale.US); 

     return df2.format(df1.parse(tim)); 
    } 
    catch (ParseException e) 
    { 
     return null; 
    } 
} 

我从各种这里的StackOverflow职位的这一解决方案。但是这段代码仍然返回null。谁能告诉我为什么?

回答

4

null值正在从异常块返回由于第一SimpleDateFormat返回null作为无效日期格式的结果。

Z图案用于表示时区模式。要接受文字Z字符,则需要围绕字符与单引号。

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'", Locale.US); 

此外,您还可以做同样的与T字符,如果你不希望做一个手动更换:

而不是

String tim = time.replace("T", " "); // remove 

只是使用time及用途:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); 
0

它抛出ParseException解析字符串2013-03-28 15:16:58.000Z。

尽量摆脱的Z [喜欢你与T做]并使用SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)

+1

或者尝试治疗两个z和T妥善像下面的问题,但具有下列另外'新的SimpleDateFormat( “YYYY-MM-dd'T'HH:MM:ss.SSS'Z'原”,Locale.US) ;' – ararog 2013-04-06 20:57:55

2

它返回null,因为它赶上一个ParseException,你告诉它返回null。你应该至少打印出堆栈跟踪,这应该告诉你为什么你所得到的ParseException的。