问题:如果我在2015年1月31日向A借款1000元,一个月之后准时还。这时,问题就出来了,我是在2月28日还,还是在3月2日还?
这时我们就必须弄清楚我们是按30天一个月算得,还是直接按一个月算。
最近做一个p2p网贷的二次开发,遇到了这个问题,假如用户在31日发标,但如果下个月没有31日,这样就会产生一些误会。
那么假如我们把一个月定义成单纯的一个月,比如1月1日,一个月之后就是2月1日,而如果是1月31日,那么一个月之后就是2月28日(闰年是2月29日)。那么在程序里面怎么算呢?
Java里面提供了一些解决办法:
为了测试,我们把计算机时间跳到2015年1月31日
package test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CalendarTest {
//时间格式
private static SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd");
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
System.out.println("现在的日期是:"+sf.format(calendar.getTime()));
calendar.setTime(new Date());
calendar.add(Calendar.DATE, 30);//30天之后
System.out.println("一个月后(按一个月30天算)是:"+sf.format(calendar.getTime()));
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, 1);//一个月之后
System.out.println("一个月后(按单纯一个月算)是:"+sf.format(calendar.getTime()));
System.out.println("***************************************");
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, -1);
System.out.println("一个月前是:"+sf.format(calendar.getTime()));
calendar.setTime(new Date());
calendar.add(Calendar.YEAR, 1);
System.out.println("一年后是:"+sf.format(calendar.getTime()));
calendar.setTime(new Date());
calendar.add(Calendar.DATE, 1);
System.out.println("一天后是是:"+sf.format(calendar.getTime()));
}
}
运行结果:
现在的日期是:2015年01月31
一个月后(按一个月30天算)是:2015年03月02
一个月后(按单纯一个月算)是:2015年02月28
***************************************
一个月前是:2014年12月31
一年后是:2016年01月31
一天后是是:2015年02月01