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 }