日历的添加方法会给出错误的值吗?

时间:2016-01-04 12:19:20

标签: java android date calendar

我正在尝试使用c.add(Calendar.DATE,1)更改按钮点击的日期。它应该将当天增加1.问题是当月份改变时,日期增加到32而不是预期的1(1月)。月份更改为2月,但日期更改为32,依此类推,例如32-Feb-2016

 final TextView tv_date = (TextView) dialyReportView.findViewById(R.id.datepicker);
 @Override
            public void onClick(View v) {
                Calendar c;
                c= Calendar.getInstance();
                c.add(Calendar.DATE,1);
                SimpleDateFormat df= new SimpleDateFormat("DD-MMM-yyyy");
                String nextDate = df.format(c.getTime());
                tv_date.setText(nextDate);
            }
        });

我是编程新手,所以感谢任何帮助。谢谢! :)

3 个答案:

答案 0 :(得分:4)

问题是您使用的是D(一年中的某一天),而不是d(每月的某一天)。例如,以下代码输出31-Jan-201532-Feb-2015

 Calendar c = Calendar.getInstance();
 c.set(2015, 0, 31);
 c.SimpleDateFormat df= new SimpleDateFormat("DD-MMM-yyyy");
 System.out.println(df.format(c.getTime()));
 c.add(Calendar.DATE,1);
 System.out.println(df.format(c.getTime()));

而以下输出31-Jan-201501-Feb-2015

 Calendar c = Calendar.getInstance();
 c.set(2015, 0, 31);
 c.SimpleDateFormat df= new SimpleDateFormat("dd-MMM-yyyy");
 System.out.println(df.format(c.getTime()));
 c.add(Calendar.DATE,1);
 System.out.println(df.format(c.getTime()));

答案 1 :(得分:3)

更改日期格式代码行,如下所示。

SimpleDateFormat df = new SimpleDateFormat(“dd-MMM-yyyy”);

答案 2 :(得分:2)

检查https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

DD表示一年中的一天,dd表示每月的一天

Letter  Date or Time Component  Presentation    Examples
D       Day in year             Number          189
d       Day in month            Number          10