Simpledateformat ParseException

时间:2012-11-03 06:26:12

标签: java android

我需要将输入日期格式更改为我想要的格式。

String time = "Fri, 02 Nov 2012 11:58 pm CET";
SimpleDateFormat displayFormat = 
    new SimpleDateFormat("dd.MM.yyyy, HH:mm");
SimpleDateFormat parseFormat = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm aa z");
Date date = parseFormat.parse(time);
System.out.println("output is " + displayFormat.format(date));

它给了我这个错误

java.text.ParseException: Unparseable date: "Fri, 02 Nov 2012 11:58 pm CET"
    at java.text.DateFormat.parse(Unknown Source)
    at Main.main(Main.java:10)

可以帮我吗?因为此代码不起作用。

3 个答案:

答案 0 :(得分:1)

Android z似乎不接受XXX格式的时区(例如“CET”)。 (从the SimpleDateFormat documentation拉出来。)

请改为尝试:

String time = "Fri, 02 Nov 2012 11:58 pm +0100"; // CET = +1hr = +0100
SimpleDateFormat parseFormat = 
    new SimpleDateFormat("EEE, dd MMM yyyy hh:mm aa Z"); // Capital Z
Date date = parseFormat.parse(time);

SimpleDateFormat displayFormat = 
    new SimpleDateFormat("dd.MM.yyyy, HH:mm");
System.out.println("output is " + displayFormat.format(date));
  

输出是02.11.2012,22:58

注意:另外,我认为您的意思是hh而不是HH,因为您有PM

显示结果here。 (这使用Java7的SimpleDateFormat,但Android也应支持RFC 822时区(+0100)。)

NB :此外,由于Android z接受全名(“太平洋标准时间”是他们提供的示例),您可以简单地指定“Centural European Time”而不是“CET”。

答案 1 :(得分:0)

尝试以下代码:

SimpleDateFormat date_format = new SimpleDateFormat("yyyyMMMdd");
    System.out.println(date_format.format(cal.getTime()));

它会工作..如果不打印日志猫?什么错误来了?

答案 2 :(得分:0)

首先,我必须同意@Eric回答。

您只需要从日期字符串中删除“CET”。

以下是示例代码。检查一下。

        String time = "Fri, 02 Nov 2012 11:58 pm CET";
        time = time.replaceAll("CET", "").trim();
        SimpleDateFormat displayFormat = 
            new SimpleDateFormat("dd.MM.yyyy, HH:mm");
        SimpleDateFormat parseFormat = 
            new SimpleDateFormat("EEE, dd MMM yyyy HH:mm aa");
        Date date = null;
        try {
            date = parseFormat.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("output is " + displayFormat.format(date));