一個關於借款時間的問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章