Java Calendar.get(Calendar.year)中的年份值错误
对于下面的代码,我得到了错误的输出Java Calendar.get(Calendar.year)中的年份值错误,java,Java,对于下面的代码,我得到了错误的输出 class Test{ public static void main(String[] args) { String dateStr = "May 11, 2019 11:35:34 AM"; SimpleDateFormat format = new SimpleDateFormat("MMM dd, YYYY HH:mm:ss a"); try{
class Test{
public static void main(String[] args) {
String dateStr = "May 11, 2019 11:35:34 AM";
SimpleDateFormat format = new SimpleDateFormat("MMM dd, YYYY HH:mm:ss a");
try{
Date d1 = format.parse(dateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
System.out.println(cal.get(Calendar.YEAR));
System.out.println(Calendar.YEAR);
}catch (Exception e){
e.printStackTrace();
}
}
}
O/p2018年 预期O/p
2019您应使用小写字母
y
,如下所示:
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
请注意,小写/大写会更改结果
| Letter | Date/Time component |
| y | Year |
| Y | Week year |
| m | Minute |
| M | Month in year |
|信函|日期/时间部分|
|年|
|年|周|
|分钟|
|一年中的月数|
您应使用小写字母
y
,如下所示:
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
请注意,小写/大写会更改结果
| Letter | Date/Time component |
| y | Year |
| Y | Week year |
| m | Minute |
| M | Month in year |
|信函|日期/时间部分|
|年|
|年|周|
|分钟|
|一年中的月数|
日历有两种类型。ISO周日期和另一个公历日期。ISO周日期有52或53个整周,这意味着根据闰年与否,它不会有正常的365/366天,而是365/371天(365+1周)。yyyy是我们知道的正常日历年 或者,您可以使用GregorianCalendar代替日历,如下所示,以获得YYYY或YYYY的相同结果-
GregorianCalendar gregcal = new GregorianCalendar();
gregcal.setTime(d1);
System.out.println(gregcal.getWeekYear());
日历有两种类型。ISO周日期和另一个公历日期。ISO周日期有52或53个整周,这意味着根据闰年与否,它不会有正常的365/366天,而是365/371天(365+1周)。yyyy是我们知道的正常日历年 或者,您可以使用GregorianCalendar代替日历,如下所示,以获得YYYY或YYYY的相同结果-
GregorianCalendar gregcal = new GregorianCalendar();
gregcal.setTime(d1);
System.out.println(gregcal.getWeekYear());
使用
yyyy
而不是yyy
我建议您避免使用SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们的情况好多了。当我在我的电脑上运行你的代码时,d1
是2018年12月31日星期一11:35:34 CET。大写字母YYYY
表示基于周的年份,仅对周数有用。由于缺少周数,似乎SimpleDateFormat
选择了第1周的第一天。而这恰好发生在2018年。使用yyyy
而不是yyy
我建议您避免使用SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们的情况好多了。当我在我的电脑上运行你的代码时,d1
是2018年12月31日星期一11:35:34 CET。大写字母YYYY
表示基于周的年份,仅对周数有用。由于缺少周数,似乎SimpleDateFormat
选择了第1周的第一天。而这恰好发生在2018年。只是一个轻微的调整:基于周的一年有52周=364天或53周=(正确)371天。只是一个轻微的调整:基于周的一年有52周=364天或53周=(正确)371天。