1.情景展示
java 根據系統當前日期獲取前一天日期、后一天日期,或者根據初始日期推算出期望(向前/向后)日期。
2.解決方案
導包
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;
方法一:
/**
* 根據初始日期推算期望(向前/向后)日期
* @param initTime
* 初始日期(initTime可以是null、Date、String數據類型)
* @param n
* 向前/向后推算n天(n可以是正整數、0、負整數)
* @return
* 推算后的日期字符串
*/
public static String getCalculateDay(Object initTime,int n){
// 返回推算后的日期
String calculateDay = "";
try {
// 實例化日歷類Calendar
Calendar calendar = Calendar.getInstance();
// 定義日期格式化樣式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 初始日期
Date initDate = null;
// 判斷參數類型
if (null == initTime) {
// 取系統當前時間
initDate = new Date();
} else if (initTime instanceof Date) {
initDate = (Date)initTime;
} else {
// 日期格式字符串轉換成日期類Date
initDate = sdf.parse((String)initTime);
}
// 設置日歷時間
calendar.setTime(initDate);
// 設置推算后的日歷時間
calendar.add(Calendar.DATE, n);
// 獲取推算后的日期
Date calculateDate = calendar.getTime();
// 進行格式化
calculateDay = sdf.format(calculateDate);
} catch(ParseException e) {
e.printStackTrace();
}
return calculateDay;
}
方法二:
/**
* 根據初始日期推算期望(向前/向后)日期
* @param initTime
* 初始日期
* @param n
* 向前/向后推算n天
* @return
* 推算后的日期
*/
public static String getCalculateDay2(Object initTime,int n) throws ParseException{
// 返回推算后的日期
String calculateDay = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 初始日期
Date initDate = null;
if (null == initTime)
initDate = new Date();
else if (initTime instanceof Date)
initDate = (Date)initTime;
else
initDate = sdf.parse((String)initTime);
// 轉換成距離1970年0時0分的毫秒數
Long initMilliSeconds = initDate.getTime();
// 一天代表的毫秒數
int oneDayTime = 24 * 60 * 60 * 1000;
initMilliSeconds += oneDayTime * n;
// 推算出的日期
Date calculateDate = new Date(initMilliSeconds);
calculateDay = sdf.format(calculateDate);
return calculateDay;
}
3.測試
public static void main(String[] args) throws ParseException {
// 獲取后一天所在日期
System.out.println(getCalculateDay(null,1));// 2019-04-09
System.out.println(getCalculateDay2(null,1));// 2019-04-09
}
