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 }