我试图使用SimpleDateFormat打印两个日期,但对于我的自定义日期,输出看起来完全不同。
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date2 =dateFormat.parse("01/01/2014 10:45:01");
System.out.println(("date2:"+date2));
Date date = new Date();
System.out.println(dateFormat.format(date)); // how it prints this is the desired outcome
输出:
date2:Wed Jan 01 10:45:01 GMT 2014
11/04/2014 10:45:50
输出正确。您通过使用DateFormat
解析字符串中的日期来创建date2
。但是,当打印date2
时,并不是用dateFormat.format()
打印,因此日期将以默认格式打印。
尝试System.out.println("date2:"+dateFormat.format(date2));
format()将以所需格式返回日期字符串。
Date Object ---------->SDF Fomatter------>Formatted date in String
parse()接受字符串格式(自定义格式)的日期并返回日期对象
Formatted String date ------>SDF parse----->Date object
想要检查,打印它的值:
dateFormat.format(dateFormat.parse("01/01/2014 10:45:01"));
您已经使用日期格式对其进行了解析,但您需要对其进行格式化以获得所需的输出。
System.out.println(("date2:"+dateFormat.format(date2));
您尝试过dateFormat.parse("dd/MM/yyyy HH:MM:ss")吗?
行
System.out.println(("date2:"+date2));
对date2
参数隐式调用toString()
方法。由于Date
已经覆盖了它从Object
继承的toString()
方法,因此正是该方法规定了输出的格式。Date#toString()
的Javadoc声明:
将此
Date
对象转换为以下形式的String
:dow mon dd hh:mm:ss zzz yyyy
这与您在输出中看到的内容相匹配。为了获得预期的输出,您需要执行以下操作:
System.out.println(("date2:" + dateFormat.format(date2)));
Date
对象没有与其关联的格式。它们是一个愚蠢的对象,不需要知道任何显示格式的详细信息,因为它们与日期本身无关。