字符串到日期转换返回错误的值

时间:2013-07-25 14:17:03

标签: java string date

我正在尝试将String转换为Date ...但返回值是错误的。

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

所需的输出是:

  

Thu Jul 25 00:00:00 CDT 2013

但实际输出是:

  

Fri Jan 25 00:00:00 CST 2013

从7月开始月份如何变成1月?

5 个答案:

答案 0 :(得分:10)

我看到的一个问题是:

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

应该是:

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

DD表示YEAR日。有关SimpleDateFormat的更多信息,请阅读此内容。

答案 1 :(得分:6)

更改dd的DD;

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

答案 2 :(得分:2)

DD替换为dd以匹配日期。

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

根据SimpledateFormat documentation

  

D 一年中的一天

     

d 日期

答案 3 :(得分:1)

每月的某一天是使用小写的“d”进行的,而你使用的是大写的......

将其更改为:

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

它会起作用

答案 4 :(得分: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日期和版本。时间API称为java.time或JSR-310“原生”,因此不需要显式格式化程序。它也是类的toString方法通常产生的,这就是为什么你得到相同的输出。如果您想要以不同的格式输出,请使用DateTimeFormatter

我建议单独留下过时的SimpleDateFormat和朋友。你真正问到的是7月份的日期,是一年中的第24天。显然没有这样的日期,SimpleDateFormat通常会给你一些约会并假装一切都很好。我无法计算过时类的这种令人惊讶的行为产生的Stack Overflow上的问题。现代API可以更好地使用,并且当你犯错误时会更加努力地告诉你(我们显然都会这样做)。