1

我正在处理需要转换为 java.util.date 对象的日期字符串。

我正在使用以下代码来执行此操作:

public void setDates(String from, String to) throws ParseException
{
    Date fromDate = new Date();
    Date toDate = new Date();
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    fromDate = df.parse(from);
    toDate = df.parse(to);

    this.setDepartDate(fromDate);
    this.setReturnDate(toDate);
}

问题是我必须转换的字符串值总是(而且我无法控制)采用以下格式:“2013 年 9 月 20 日”。

这会导致我的函数在到达时通过 ParseExceptionfromDate = df.parse(from);

谁能帮我理解为什么,也许可以提出解决方案?

4

6 回答 6

7

查看SimpleDateFormatJavaDocs以获取可用的格式选项,但基本上,您需要将日期格式更改为更像dd MMMM, yyyy

try {
    String dateValue = "20 September, 2013";
    SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
    Date date = df.parse(dateValue);
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}

哪个输出...

Fri Sep 20 00:00:00 EST 2013
于 2013-09-13T08:07:24.093 回答
6

根据javadoc使用以下格式

SimpleDateFormat df = new SimpleDateFormat("dd MMMMM, yyyy");

还要决定这个解析是否需要宽松,是否需要严格使用setLenient(false)

默认情况下,解析是宽松的:如果输入不是该对象的格式方法使用的格式,但仍然可以解析为日期,则解析成功。客户可以通过调用 setLenient(false) 来坚持严格遵守格式。

另请注意,这SimpleDateFormat不是线程安全的。如果有选择,我建议使用 提供更多增强功能的Joda Time Library 。

于 2013-09-13T08:08:34.100 回答
5

你写了

[...] 格式如下:“2013 年 9 月 20 日”。

那么你SimpleDateFormat应该是

"dd MMM, yyyy"

您可以查看SimpleDateFormat文档

于 2013-09-13T08:07:30.773 回答
4

解析日期时,您需要了解一些上下文或使用一些假设。您可以使用 SimpleDateFormat,但您可能需要在使用之前预先解析字符串以查看它是哪种格式。您可能必须尝试多种格式来查看是否有一种或多种方法来解析日期。

BTW 是 01/02/30 1930 年 2 月 1 日或 2030 年 1 月 2 日或 2001 年 2 月 30 日,您需要了解日期可能意味着什么或对格式有一些控制。

于 2013-09-13T08:10:13.563 回答
1
于 2018-07-25T08:53:06.727 回答
0

您需要使用以下日期模式dd MMMM, yyyy

试试这个代码,

        String dateValue = "20 September, 2013";
        // Type of different Month views        
        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy"); //20 September, 2013
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM, yyyy");  //20 09, 2013
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM, yyyy"); //20 Sep, 2013 
        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Sep 20 00:00:00 IST 2013
于 2018-07-25T06:44:59.580 回答