2

我正在尝试将日期字符串格式化为日期,然后从中获取月/日:

String strDate="2013-05-15T10:00:00-07:00";
SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss-z");

    Date convertedDate = new Date();
    try {
        convertedDate = dateFormat.parse(strDate);
    } catch (ParseException e) {

        e.printStackTrace();
    }

 SimpleDateFormat sdfmonth = new SimpleDateFormat("MM/dd");
        String monthday= sdfmonth.format(convertedDate);

但它会返回我当前的月份/日期,即 5/18。怎么了?

4

2 回答 2

5

3件事:

  • 你的格式有错误: 2013-05-15T10:00:00-07:00 没有意义,应该是 2013-05-15T10:00:00-0700 (最后没有冒号,这是一个RFC 822 中定义的时区。(查看有关 Z的文档)。
  • 将您的格式更改为 yyyy-MM-dd'T'HH:mm:ssZ 正如@blackbelt 提到的那样
  • 你得到一个糟糕的日期,因为你重新格式化你的日期,无论在解析过程中发生什么。当且仅当解析有效时,在您的 try 块中重新格式化。

- - - - - 更新

    String strDate = "2013-05-15T10:00:00-0700";
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

    Date convertedDate = new Date();
    try {
        convertedDate = dateFormat.parse(strDate);
        SimpleDateFormat sdfmonth = new SimpleDateFormat("MM/dd");
        String monthday = sdfmonth.format(convertedDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
于 2013-05-18T12:28:50.207 回答
2

我不知道你的代码有什么问题。对我来说,它会抛出这样的 Unparseable 异常。

java.text.ParseException: Unparseable date: "2013-05-15T10:00:00-07:00"

但以下方式效果很好。

String strDate="January 2, 2010";
SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy");
Date date = dateFormat.parse(strDate);
System.out.println(date.getMonth());

但在 java Date中,根据http://docs.oracle.com/已弃用。尝试使用日历而不是日期。

我希望这能帮到您。

于 2013-05-18T12:23:03.970 回答