2011-02-05开始签租房合同,时间是一个月,那么合同到期时间是2011-03-04、
算法是:自然月加一(成3月了),天数减一(成4号了)
再来看另外一个日期:2011-02-28开始,为期一个月,那么,按照上面的算法,结束日期是2011-03-27
这个时候问题来了,有人说结束日期应该是2011-03-30、
我想我猜测我估计我觉得我认为他是这么想的:2011-02-28是2月的最后一天,那么加一个月之后应该是下一个月的最后一天,即:2011-03-31,31-1=30.
我个人的观点是不管是月头还是月末还是月中,都按照自然月加一天书减一的算法。当然这只是我个人的观点,另外我贴上一段代码就当是证据吧、public static void main(String[] args) {
String date = "2011-02-28";
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date d = sdf.parse(date);
cal.setTime(d);
System.out.println("合同开始日期:" + sdf.format(cal.getTime()));
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
System.out.println("合同结束日期:" + sdf.format(cal.getTime()));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}最后输出:合同开始日期:2011-02-28
合同结束日期:2011-03-27求板砖、
算法是:自然月加一(成3月了),天数减一(成4号了)
再来看另外一个日期:2011-02-28开始,为期一个月,那么,按照上面的算法,结束日期是2011-03-27
这个时候问题来了,有人说结束日期应该是2011-03-30、
我想我猜测我估计我觉得我认为他是这么想的:2011-02-28是2月的最后一天,那么加一个月之后应该是下一个月的最后一天,即:2011-03-31,31-1=30.
我个人的观点是不管是月头还是月末还是月中,都按照自然月加一天书减一的算法。当然这只是我个人的观点,另外我贴上一段代码就当是证据吧、public static void main(String[] args) {
String date = "2011-02-28";
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date d = sdf.parse(date);
cal.setTime(d);
System.out.println("合同开始日期:" + sdf.format(cal.getTime()));
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
System.out.println("合同结束日期:" + sdf.format(cal.getTime()));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}最后输出:合同开始日期:2011-02-28
合同结束日期:2011-03-27求板砖、
还有一点我想说的是:我把上面贴出来的代码中开始日期改为String date = "2011-01-31";
然后把减去一天的那行代码注释掉...
String date = "2011-01-31";
...
//(cal.ad(Calendar.DAY_OF_MONTH, -1);)
...注释掉,输出的值是:合同开始日期:2011-01-31
合同结束日期:2011-02-28也就是说java里边没有给计算到2月31号(也就是楼上说的3月2号)去、而是28号。
不知道这作何解释
for example
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 30); //30日
cal.set(Calendar.MONTH, 1); //2月
System.out.println("date:" + sdf.format(cal.getTime()));