[英]java Date class - Why I have other date output in these lines?
我的代码:
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
Date date = new Date();
System.out.println(sdf.format(date));
System.out.println(sdf.format(sdf.parse(sdf.format(date))));
这个输出我得到:
2013-02-08 15:48:37
2013-12-30 15:48:37
预期输出:
2013-02-08 15:48:37
2013-02-08 15:48:37
看日期的日期和月份
问题来自“解析”方法
==>“从给定字符串的开头解析文本以产生日期。该方法可能不会使用给定字符串的整个文本。”
The method may not use the entire text of the given string.
我已经运行了您的代码,并得到以下内容:
System.out.println(sdf.format(date));
System.out.println(sdf.parse(sdf.format(date)));
System.out.println(sdf.format(sdf.parse(sdf.format(date))));
结果:
2013-02-08 14:54:39
Mon Dec 31 14:54:39 CET 2012
2013-12-31 14:54:39
如您所见,parse函数可以正确转换时间,但不能转换日期本身。 我认为不打算以这种方式使用它,因此会产生奇怪的结果。
但是,这是我第一次注意到这一点,因此我将无法提供更多详细信息:)
为了简单起见,让我们使用一个基本的测试用例:
String date = "2013-02-08 15:48:37";
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
System.out.println(sdf.parse(date));
// Output: Mon Dec 31 15:48:37 CET 2012
根据SimpleDateFormat Javadoc ,格式说明符Y
用来表示“周年”。 “年份”的正确格式说明符是y
这样,我们将获得正确的输出:
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.parse(date));
// Output: Fri Feb 08 15:48:37 CET 2013
假设log
是某种记录器,则其标准做法是让他们打印出每行的时间日期和日志级别。 如果需要的话,可以更轻松地从日志中进行调试,
我无法重现此内容:
public static void main(String[] args) {
// TODO code application logic here
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Logger log = Logger.getLogger("InfoLogging");
log.info(sdf.format(date));
try {
log.info(sdf.format(sdf.parse(sdf.format(date))));
} catch (Exception e) {
e.printStackTrace();
}
}
给出输出:
Feb 8, 2013 2:57:09 PM javaapplication2.JavaApplication2 main
INFO: 2013-02-08 14:57:08
Feb 8, 2013 2:57:09 PM javaapplication2.JavaApplication2 main
INFO: 2013-02-08 14:57:08
您正在使用哪个记录仪?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.