我正在尝试将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月?
答案 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可以更好地使用,并且当你犯错误时会更加努力地告诉你(我们显然都会这样做)。