SimpleDateFormat的parse方法输出错误
在编码过程中发一个异常现象,SimpleDateFormat的parse方法总是输出当前年份的第一天。
仔细发现是因为在new SimpleDateFormat时使用了YYYY,而不是yyyy,具体现象及代码实现如下:
@Test
public void testYandy() {
// String dateStr = "20180101";
String dateStr = "2017-03-10";
System.out.println(DateUtil.parse("yyyy-MM-dd", dateStr, Locale.getDefault()));
System.out.println(DateUtil.parse("YYYY-MM-dd", dateStr, Locale.getDefault()));
}
public static java.util.Date parse(String pattern, String strDateTime,
Locale locale) {
if (strDateTime == null || pattern == null)
return null;
try {
SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
formatter.setLenient(false);
return formatter.parse(strDateTime);
} catch (Exception e) {
return null;
}
}
SimpleDateFormat的format方法输出错误
在出现上面的parse方法错误输出之后,又百度了一下,得到的解释多是:
YYYY为当前天所在的周的所在的年份
yyyy为当前天所在的年份
具体情境如下:
@Test
public void testYandy2() {
Calendar calendar = Calendar.getInstance();
// 2014-12-26
calendar.set(2010, Calendar.DECEMBER, 26);
Date strDate1 = calendar.getTime();
System.out.println(strDate1);
SimpleDateFormat f1 = new SimpleDateFormat("YYYY-MM-dd");
System.out.println("Result for YYYY: " + f1.format(strDate1));
SimpleDateFormat f2 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("Result for yyyy: " + f2.format(strDate1));
}
总结
通过以上的情况,第二种情况说是YYYY和yyyy的不同含义引起的还说的通,可是为什么在第一种情况下就变成了当前年的第一天了呢?百度也没找到。。暂且记着。