2012-03-01 121 views
0

我正在以这种格式2012-01-13T00:00:00.000-05:00接收输入,并且需要将其转换为yyyyMMdd格式。 我也设置了SimpleDateFormat.setLenient(false);java:java.text.ParseException:Unparseable date

这是我解析日期

public static String getparsedDate(String date) throws Exception { 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); 
     sdf.setLenient(false); 

     String s1 = date; 
     String s2 = null; 
     Date d; 
     try { 
      d = sdf.parse(s1); 
      s2 = (new SimpleDateFormat("yyyyMMdd")).format(d); 

     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     return s2; 

    } 

但我在

java.text.ParseException得到一个异常编码:无法解析的日期: “201201”

at java.text.DateFormat.parse(Unknown Source) 

有没有人请让我知道,可能是什么问题?

+1

错误提示您没有以您认为的格式获取数据。 – skaffman 2012-03-01 11:26:58

回答

0

您在格式字符串中缺少时区。如果您检查参数,它将以-05:00结束,并且您还正在使用Lenient == false。

+0

感谢您的回应,但您怎么知道准确通过什么? – Pawan 2012-03-01 11:32:19

+0

我不明白你的问题......我猜输入是由其他人定义的,所以他们应该告诉你。格式所期望的是构造函数的第一个参数。请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String,java.util.Locale) – Luis 2012-03-01 11:42:53

0

不幸的是,可用于SimpleDateFormat的时区格式不符合ISO8601标准。 SimpleDateFormat理解时区字符串,如“GMT + 01:00”或“+0100”,后者根据RFC822。因此,在您的情况下使用SimpleDateFormat似乎不是一个选项(因为您使用UTC-05:00作为时区)。

代替SimpleDateFormat,您需要使用JodaTime作为该类型的日期格式。

+0

感谢您的答案,但我得到java.lang.IllegalArgumentException异常:非法字符模式 'Y' \t在java.text.SimpleDateFormat.compile(来源不明) \t在java.text.SimpleDateFormat.initialize(来源不明) \t在java.text中。 SimpleDateFormat的。 (未知来源) – Pawan 2012-03-01 12:05:19

+0

我编辑了我的答案。我强烈建议你看看JodaTime API。查看这个讨论以获取更多信息:http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date – 2012-03-01 12:10:18

+0

谢谢,但我们并不赞同使用第三方API,无论如何谢谢再来一次 。 – Pawan 2012-03-01 12:22:15