雖然 Java 8 引入了更優秀的 java.time 包,但在維護舊代碼時仍需掌握 Calendar 與 SimpleDateFormat 的組合用法。
/**
* 將指定日期字符串增加指定天數
* @param days 增加的天數(可為負數減少天數)
* @param dateStr 日期字符串,格式:yyyy-MM-dd HH:mm:ss
* @return 處理後的日期字符串
* @throws ParseException 日期格式解析異常
*/
public String addDaysToDate(int days, String dateStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); // 核心操作:日期字段加減
return sdf.format(cal.getTime());
}
// 調用示例
String result = addDaysToDate(1, "2016-03-30 22:17:01"); // 2016-03-31 22:17:01
/**
* 當前日期增加指定天數
* @param days 增加天數
* @return 結果日期字符串
*/
public String addDaysToNow(int days) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance(); // 默認獲取當前時間
cal.add(Calendar.DATE, days);
return sdf.format(cal.getTime());
}
// 調用示例
String tomorrow = addDaysToNow(1);
String nextWeek = addDaysToNow(7);
LocalDateTime 線程安全、不可變、API 更直觀:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public String addDaysModern(int days, String dateStr) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = dateStr == null ? LocalDateTime.now() : LocalDateTime.parse(dateStr, fmt);
return ldt.plusDays(days).format(fmt);
}
add() 會自動處理月份進位、閏年等邊界情況SimpleDateFormat 非線程安全,多線程環境下請使用 ThreadLocal 或 Java 8 新 APIjava.time.LocalDateTime 或 Instant