import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
SimpleDateFormat datef = new SimpleDateFormat("dd/mm/yyyy");
Date date1 = new Date(2010, 03, 03) ;
Date date2 = datef.parse("03/03/2010") ;
System.out.println( date1 );
System.out.println( date2 );
}
}
提供以下输出:
Sun Apr 03 00:00:00 MST 3910 Sun Jan 03 00:03:00 MST 2010
为什么会给出不同的结果?
答案 0 :(得分:3)
新日期(2010,03,03):
预计第一个参数为1900年,第二个为月(从0开始为1月),第三个参数为日
您输出的原因是“Sun Apr 03 00:00:00 MST 3910”=> constructor将1900添加到作为第一个参数传递的年份。 4月为第3指数。
不推荐使用此构造函数。
输出'Sun Jan 03 00:03:00 MST 2010'的原因:您没有使用正确的格式, 如果您使用“dd / MM / yyyy”,那么您将获得正确的输出。
希望这有帮助
答案 1 :(得分:2)
来自java来源:
@Deprecated
public Date(int year, int month, int date, int hrs, int min, int sec) {
int y = year + 1900;
// month is 0-based. So we have to normalize month to support Long.MAX_VALUE.
if (month >= 12) {
y += month / 12;
month %= 12;
} else if (month < 0) {
y += CalendarUtils.floorDivide(month, 12);
month = CalendarUtils.mod(month, 12);
}
BaseCalendar cal = getCalendarSystem(y);
cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0);
getTimeImpl();
cdate = null;
}
如您所见,年份是一个棘手的参数。
答案 2 :(得分:1)
你有两个错误。
最后一篇文章回答了这个问题,但可能没有明确说明:要指定2010年,请将“110”作为参数。年份自1900年以来指定年份。
您的格式模式使用“mm”数月。这是几分钟的模式。改为使用“MM”。