Java中calendar.add方法的介绍与应用
在Java中,`Calendar`类是一个非常实用的日期和时间处理工具。以下是关于`calendar.add`方法的相关介绍及示例。
首先,我们来看一些基本的代码示例:
示例1:获取当前日期并增加一天
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
calendar.add(Calendar.DAY_OF_YEAR, 1);
Date date = calendar.getTime();
String formattedDate = sdf.format(date);
示例2:获取上个月的日期
public static String getLastMonthDay(String data) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
ParsePosition pos = new ParsePosition(0);
Calendar calendar = Calendar.getInstance();
calendar.setTime(formatter.parse(data, pos));
calendar.add(Calendar.MONTH, -1);
return formatter.format(calendar.getTime());
}
示例3:计算两年后的日期
Calendar now = Calendar.getInstance();
Calendar working = (Calendar) now.clone();
SimpleDateFormat formatter = new SimpleDateFormat("E 'at' hh:mm:ss a zzz");
working.add(Calendar.DAY_OF_YEAR, 365 * 2);
System.out.println("Two years ago it was " + formatter.format(working.getTime()));
示例4:设置日期为前一天
Date dNow = new Date(); Date dBefore = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(dNow); calendar.add(Calendar.DAY_OF_MONTH, -1); dBefore = calendar.getTime();
关于`calendar.add`方法的原理,当调用`calendar.add`方法时,会重新计算日历的毫秒数和所有字段。它调用的是`Calendar`中的`updateTime`方法,而`updateTime`方法又调用了`computeTime`方法。不过在`Calendar`抽象类中,`computeTime`方法是抽象的,所以即使执行了`add`之类的方法,也不会立即更新到毫秒数。这意味着虽然其字段的值已经改变,但是毫秒数并未重新计算。
另外,需要注意的是,`Calendar`的月份是从0到11的。例如,`objCalendar.add(Calendar.MONTH, -1)`的作用就是将月份减1。比如`objCalendar.set(2001, 2, 1)`之后的日期是2001年3月1日,此时直接加上28天就是2001年3月29日,如果加上`objCalendar.add(Calendar.MONTH, -1)`,月份减1,日期就变成了2001年2月1日。
同时,时间单位的换算为:1小时 = 60分 = 60 * 60秒 = 3600秒。在使用`calendar.add`方法时,可能需要根据具体需求设置`Locale`等相关属性。
相关标签 :





