3

我正在尝试将字符串转换为日期...但返回值是错误的。

String startDate = "2013-07-24";
Date date = new Date();
try{         
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 
    date = (Date)formatter.parse(startDate);
    System.out.println(date);    
}
catch(Exception e){
    e.printStackTrace();
}

所需的输出是:

2013 年 7 月 25 日星期四 00:00:00 CDT

但实际输出是:

2013 年 1 月 25 日星期五 00:00:00 CST

月份如何从七月变成一月?

4

5 回答 5

10

我看到的一个问题是:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 

应该:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

DD表示 YEAR 中的一天。阅读本文以获取有关SimpleDateFormat的更多信息。

于 2013-07-25T14:18:14.943 回答
7

把DD换成dd;

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
于 2013-07-25T14:18:41.063 回答
2

替换DDdd以匹配日期。

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

根据SimpledateFormat 文档

D 一年中的一天

d 月中的一天

于 2013-07-25T14:18:59.910 回答
1

月份中的某天使用小写的“d”,而您使用的是大写...

将其更改为:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

它会起作用的

于 2013-07-25T14:20:14.813 回答
1

现代答案:

    String startDate = "2013-07-24";
    try {
        LocalDate date = LocalDate.parse(startDate);
        System.out.println(date);
    } catch (DateTimeParseException dtpe) {
        System.out.println(dtpe.getMessage());
    }

它打印与输入字符串相同的内容:

2013-07-24

您的字符串符合 ISO 8601。这是现代 Java 日期和时间 APIjava.time或 JSR-310 本身“理解”的内容,因此不需要显式格式化程序。这也是toString类的方法通常产生的结果,这就是为什么你会得到相同的输出。如果要以不同格式输出,请使用DateTimeFormatter.

我建议不要管过时的SimpleDateFormat朋友。你真正问到的日期是 7 月,是一年中的第 24 天。显然不存在这样的日期,SimpleDateFormat无论如何给你一些日期并假装一切都很好是很典型的。我无法计算 Stack Overflow 上由过时类的这种令人惊讶的行为产生的问题。现代 API 更易于使用,并且在您犯错时会更加努力地告诉您(显然我们都会这样做)。

于 2017-07-21T14:41:48.320 回答