我很难解决与Calendar.add()
有关的问题,我需要进行健全检查。
我正在进行的项目中,我的集成测试今天开始失败。我认为这与我通过减去x天数计算日期的方法有关。
由于某种原因,当我从今天(2017年1月2日星期一)减去1天后,我得到结果2016-01-01?我期待2017-01-01?
我尝试了其他日期,它似乎工作正常,但似乎当它是任何一年的星期一2,它减去1年太多,而不是一天?
在某些情况下,我是否误解了一些基本的东西?
...
// fails. Result is 2010-01-01??
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2011, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2011-01-01", format.format(now.getTime()));
...
// fails. Result is 2016-01-01??
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2017, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2017-01-01", format.format(now.getTime()));
...
// works fine.
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2017, 0, 5);
now.add(Calendar.DATE, -1);
assertEquals("2017-01-04", format.format(now.getTime()));
...
// works fine.
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2016, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2015-01-01", format.format(now.getTime()));
...
答案 0 :(得分:2)
在格式设置模式中使用小写yyyy
而不是大写YYYY
。如下所示:
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Dates {
public static void main(String args[]){
// OK
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar now = Calendar.getInstance();
now.clear();
now.set(2011, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2011-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));
// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2017, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2017-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));
// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2017, 0, 5);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2017-01-04".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));
// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2016, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2016-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));
}
}
输出:
true
2011-01-01
true
2017-01-01
true
2017-01-04
true
2016-01-01