今天在開發項目的時候遇到一個問題就是怎麼獲取當前時間的前一天和後一天,這個實現的邏輯並不復雜,自己要寫的話的也不是難事,但是貌似感覺沒必要自己寫這樣的方法,想想Java中的Calendar類應該有這樣的方法,所以上網查了相關的資料,有兩個方法:分別是set和roll方法,這兩個方法的具體使用方法如下:
package com.java.demo;
import java.util.Calendar;
public class DateUtil {
public static void main(String[] args){
//當前時間
Calendar cl = setCalendar(2014,01,01);
System.out.print("當前時間:");
printCalendar(cl);
//前一天
cl = setCalendar(2014,01,01);
getBeforeDay(cl);
System.out.print("前一天:");
printCalendar(cl);
//後一天
cl = setCalendar(2014,01,01);
getAfterDay(cl);
System.out.print("後一天:");
printCalendar(cl);
}
/**
* 設置時間
* @param year
* @param month
* @param date
* @return
*/
public static Calendar setCalendar(int year,int month,int date){
Calendar cl = Calendar.getInstance();
cl.set(year, month-1, date);
return cl;
}
/**
* 獲取當前時間的前一天時間
* @param cl
* @return
*/
private static Calendar getBeforeDay(Calendar cl){
//使用roll方法進行向前回滾
//cl.roll(Calendar.DATE, -1);
//使用set方法直接進行設置
int day = cl.get(Calendar.DATE);
cl.set(Calendar.DATE, day-1);
return cl;
}
/**
* 獲取當前時間的後一天時間
* @param cl
* @return
*/
private static Calendar getAfterDay(Calendar cl){
//使用roll方法進行回滾到後一天的時間
//cl.roll(Calendar.DATE, 1);
//使用set方法直接設置時間值
int day = cl.get(Calendar.DATE);
cl.set(Calendar.DATE, day+1);
return cl;
}
/**
* 打印時間
* @param cl
*/
public static void printCalendar(Calendar cl){
int year = cl.get(Calendar.YEAR);
int month = cl.get(Calendar.MONTH)+1;
int day = cl.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+day);
}
}
上面的代碼就是說明了set方法和roll方法的使用,傳入一個Calendar,進行設置之後返回一個Calendar,但是roll和set有一個區別:為了測試出這兩個方法的卻別,我們將時間設置成一個邊界值:2014-01-01:看運行效果:
是通過set方法進行設置的時間的效果圖:
通過效果圖我們可以看到,set方法獲取前一天和後一天的時間是沒有任何問題的。下面再來看一下roll方法獲取前一天和後一天的時間的效果圖:
我們發現在獲取前一天的時間的時候出現問題了,就是2014-01-01獲取前一天是2014-01-31,由此我們可以看到,roll方法在獲取前一天和後一天的時候並不是級聯改動的,只會修改當前的day,而不會考慮year和month,當然他在修改day的時候是一個循環的修改,如:1月份是:1-31,就是一個循環。
通過上面的分析我們看到了set方法和roll方法的區別了。