Calendar 类是一个抽象类,GregorianCalendar 是 Calendar 的一个具体子类。
Calendar类里表示星期的常量的值是星期日为1,星期一为2,以此类推,星期六为7。
表示月份的常量的值是1月份为0,二月份为1,以此类推,十二月份为11。get方法返回的值也遵照此常量值。
1.初始化
Calendar calendar = new GregorianCalendar();
另说一句,完整显示当前日期:
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());
System.out.println(str);
2.获取时间
// 使用默认时区和语言环境获得一个日历
Calendar cal = Calendar.getInstance();
//Calendar cal = new GregorianCalendar();也可以这样写
// 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));
3..设置时间
注意月份从0开始
一起设置:
Calendar cal = Calendar.getInstance();
// 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);
或者是:
// 对 calendar 设置时间的方法
// 设置传入的时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s");
// 指定一个日期
Date date = dateFormat.parse("2013-6-1 13:24:16");
// 对 calendar 设置为 date 所定的日期
calendar.setTime(date);
// 按特定格式显示刚设置的时间
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
System.out.println(str);
设置为当前时间:
// 初始化 (重置) Calendar 对象
calendar = Calendar.getInstance();
// 用 Date 来初始化 Calendar 对象
calendar.setTime(new Date());
单个设置 :
// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());
4.计算时间
(1)add(int field, int amount):
第一个参数为作用域,可以是年,月,日,天,周,小时等,第二个参数为增加的值,可以为负数
比如在除夕当晚最后一秒,add 一秒:
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(2018, 1, 15, 23, 59, 59);
cal.add(Calendar.SECOND, 1);
System.out.println(cal.getTime());
打印时间结果如下,日期会自动进入下一天
(2)roll(int field, boolean up)
在作用域field内向前滚动一个值,值的计算
System.out.println(cal.getTime()); //Mon Dec 31 16:52:44 SGT 2012
cal.roll(Calendar.DAY_OF_YEAR, true); //在年作用域内向前滚动,由于已经到了这一年的最后一天,滚动后到了这一年的第一天。
System.out.println(cal.getTime()); //Sun Jan 01 16:52:44 SGT 2012
当回退月份时,退1月到12月时,如果是希望得到前一年的12月的话,不能使用cal.roll(Calendar.MONTH,-1),要使用cal.add(Calendar.MONTH,-1)。
5.计算两个日期之间的所有日期列表
/*两个日期之间所有日期
可以直接显示,也可以返回List*/
public static void getDates(String daysTmp) {
// 获取当前日期
String nowDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
// 所有需要保留的日志日期
List keepDates = new ArrayList();
try {
// 根据今天日期及保留天数,获取最大保留日期
Calendar cal = Calendar.getInstance();
// 获取当前日期
cal.setTime(new Date());
// 设置保留天数
//log.error("系统默认保留日期为:"+daysTmp);
cal.add(Calendar.DATE, -Integer.parseInt(daysTmp));// 天数可正可负:88或者-88
// 获取最大保留日期
String oldDate = new SimpleDateFormat("yyyy-MM-dd").format(cal
.getTime());
//log.error("当天日期:" + nowDate);
//log.error("保留最大日期:" + oldDate);
keepDates.add(oldDate);
keepDates.add(nowDate);
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date startDate = df.parse(oldDate);
startCalendar.setTime(startDate);
Date endDate = df.parse(nowDate);
endCalendar.setTime(endDate);
while (true) {
startCalendar.add(Calendar.DAY_OF_MONTH, 1);
if (startCalendar.getTimeInMillis() < endCalendar
.getTimeInMillis()) {// TODO 转数组或是集合,楼主看着写吧
keepDates.add(df.format(startCalendar.getTime()));
// System.out.println(df.format(startCalendar.getTime()));
} else {
break;
}
}
} catch (Exception e) {
//log.error("计算保留日期时出错,出错原因为NumberFormatException:" + e);
}
for(int i = 0;i<keepDates.size();i++){
System.out.print(keepDates.get(i).toString());
System.out.println();
}
//return keepDates;
}
//调用
public static void main(String[] args) {
getDates("31");
}
忘了从哪里保存的别人的草稿了
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2015, 11, 9, 11, 9, 50);
Calendar calendar2 = new GregorianCalendar();
// 设定日期
calendar2.set(Calendar.YEAR, 2015);
calendar2.set(Calendar.MONTH, 11);
calendar2.set(Calendar.DATE, 9);
calendar2.set(Calendar.HOUR_OF_DAY, 11);
calendar2.set(calendar.MINUTE, 45);
calendar2.set(calendar.SECOND, 34);
// 得到相关的日期元素。
int year = calendar2.get(Calendar.YEAR);
int month = calendar2.get(Calendar.MONTH);
int Date = calendar2.get(Calendar.DATE);
// 日:Calendar.Date和Calendar.DAY_OF_MONTH同义。
int hour = calendar2.get(Calendar.HOUR);
int Minute = calendar2.get(Calendar.MINUTE);
int ss = calendar2.get(Calendar.SECOND);
int week = calendar2.get(Calendar.DAY_OF_WEEK);
// 星期几 这里:1-7.周日是1,周一是2,,,,,周六是7
System.out.printf("%d年%d月%d日,星期%d\n", year, month, Date, week);
// 日期计算
GregorianCalendar calendar3 = new GregorianCalendar(2015, 11, 9, 14, 55, 50);
;
calendar3.add(Calendar.MONTH, -7);// 月份减7
calendar3.add(Calendar.DATE, 7);// 增加7天
printCalendar(calendar3);
// 日历对象和时间对象转化。
Date d = calendar3.getTime();
long millSecond = calendar3.getTimeInMillis();
Date date2 = new Date();
GregorianCalendar calendar4 = new GregorianCalendar();
calendar4.setTime(date2);
long g = System.currentTimeMillis();
printCalendar(calendar4);
}
public static void printCalendar(Calendar calendar) {
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int day2 = calendar.get(Calendar.DATE);
// 日:Calendar.Date和Calendar.DAY_OF_MONTH
int date = calendar.get(Calendar.DAY_OF_WEEK) - 1;// 星期几
String week = "" + ((date == 0) ? "日" : date);
System.out.printf("%d年%d月%d日,星期%s\n", year, month, day, week);
}
}