問題:如果我在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