将String转换为Date会抛出解析异常

时间:2014-03-30 07:53:33

标签: java android datetime date-format simpledateformat

我正在尝试将String转换为Date以从当前日期进行比较,并抛出解析异常

SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);  
        try {  
            java.util.Date cookiedate = format.parse("Tue Apr 29 11:40:55 GMT+04:00 2014");  

            Calendar currentDate = Calendar.getInstance();

            String dateNow = format.format(currentDate.getTime());
              java.util.Date currDate =  format.parse(dateNow);

            if (currDate.getTime() > cookiedate.getTime()) {
                return true;
            }


        } catch (ParseException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }

3 个答案:

答案 0 :(得分:3)

format中,"yyyy-MM-dd HH:mm:ss"会匹配"2013-03-30 15:57:00"之类的日期字符串,因此您获得了ParseException

如果您要解析"Tue Apr 29 11:40:55 GMT+04:00 2014",则应使用"EEE MMM dd HH:mm:ss z yyyy"将代码更改为

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

答案 1 :(得分:2)

首先,您应该使用Date格式将字符串日期解析为EEE MMM dd HH:mm:ss Z yyyy对象,然后将Date转换为yyyy-MM-dd HH:mm:ss格式,如下所示...

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

    try {  
        Date cookiedate = format.parse("Tue Apr 29 11:40:55 GMT+04:00 2014");  

        Calendar currentDate = Calendar.getInstance();

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

        cookiedate = format.parse(format.parse(cookiedate));

        String dateNow = format.format(currentDate.getTime());
        Date currDate =  format.parse(dateNow);

        if (currDate.getTime() > cookiedate.getTime()) {
            return true;
        }


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

答案 2 :(得分:1)

我认为很明显,格式化日期"Tue Apr 29 11:40:55 GMT+04:00 2014"与格式"yyyy-MM-dd HH:mm:ss"不匹配。

如果您使用格式"yyyy-MM-dd HH:mm:ss",则应解析2014-03-30 10"59:23等字符串。

如果要解析"Tue Apr 29 11:40:55 GMT+04:00 2014"之类的字符串,则应使用EEE MMM dd HH:mm:ss z yyyy之类的格式。 (我不确定z,可能应该是Z)。