【问题标题】:Converting String to Date throws parse exception将字符串转换为日期会引发解析异常
【发布时间】:2014-05-09 14:43:29
【问题描述】:

我正在尝试将字符串转换为日期以与当前日期进行比较,它会引发解析异常

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();  
        }

【问题讨论】:

  • 您不认为您需要更改 SimpleDateFormat 吗?

标签: java android datetime date-format simpledateformat


【解决方案1】:

在您的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); 

【讨论】:

    【解决方案2】:

    首先,您应该使用EEE MMM dd HH:mm:ss Z yyyy 格式将字符串日期解析为Date 对象,然后将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();  
        }
    

    【讨论】:

      【解决方案3】:

      我认为很明显格式化日期"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)。

      【讨论】:

        猜你喜欢
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多