Simpledateformat - 为什么Calendar.MONTH错误地为1月&16; 16错误地生成上个月的值(即2015年12月)?

时间:2016-01-29 11:48:18

标签: java calendar simpledateformat

我一直试图使用Simpledateformat获取当月的过去12个月的值。但是对于上个月(即2015年12月),我总是在2016年12月。

calendar.set(Calendar.MONTH,-1); 这应该是2015年12月,但不是。

我不明白逻辑。请有人解释一下。非常感谢您的时间和帮助。

我的代码:

public static void main (String[] args) throws java.lang.Exception
{
    SimpleDateFormat month_date = new SimpleDateFormat("MMM-YYYY");

    Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH, -1);


        String month_name = month_date.format(calendar.getTime());
        System.out.println("month_name : "+month_name);

}

输出:

month_name : Dec-2016

2 个答案:

答案 0 :(得分:2)

对于几个月来你可以这样做:

calendar.add(Calendar.MONTH, -1);

希望它对你有所帮助。

答案 1 :(得分:1)

代码存在一些问题。

1)您应该使用添加calendar.add(Calendar.MONTH, -1);来减去月份。

2)有趣的是,在此之后它会将输出打印为month_name : Dec-2016,这是因为您的SimpleDateFormat存在问题,即您已将年份称为资本Y,即Week year 1}}将其更改为y即可完成任务。

您可以参考SimpleDateFormat文档here.

修改后的代码为:

public static void main (String[] args) throws java.lang.Exception
    {
         SimpleDateFormat month_date = new SimpleDateFormat("MMM-yyyy");
         Calendar calendar = Calendar.getInstance();
         calendar.add(Calendar.MONTH, -1);

         String month_name = month_date.format(calendar.getTime());
         System.out.println("month_name : "+month_name);
   }