Java 返回错误值的字符串到日期转换
我正在尝试将字符串转换为日期。。。但返回值是错误的Java 返回错误值的字符串到日期转换,java,string,date,Java,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(Ex
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
从7月到1月是怎样的?我看到的一个问题是:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD");
应该是:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
DD
表示一年中的某一天。阅读本文了解更多信息。将DD更改为DD
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
将
DD
替换为DD
,以匹配日期
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
按照
D一年中的某一天
d月份中的天
一个月的哪一天是用小写字母“d”表示的,而你用的是大写字母 将其更改为:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
它会起作用的现代答案:
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.time
或JSR-310的现代Java日期和时间API本机“理解”的内容,因此不需要显式格式化程序。这也是类的toString
方法通常产生的结果,这就是为什么您会得到相同的输出。如果希望以不同格式输出,请使用DateTimeFormatter
我建议不要使用过时的
SimpleDateFormat
和朋友。你真正想要的是一个7月的日期,是一年中的第24天。显然,不存在这样的日期,而且通常,SimpleDateFormat
会给你一些日期,然后假装一切正常。我无法计算由过时类的这种令人惊讶的行为所产生的堆栈溢出问题。现代API使用起来非常方便,并且在您出错时(我们显然都会这样做)会更加努力地告诉您。它返回了正确的值。你的期望是错误的。