大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说java的calendar如何使用_Calendar类,希望您对编程的造诣更进一步.
这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
文章目录
- java.util.Calendar
-
- 介绍
- 创建对象
- 方法
- 举例:填写年月(yyyy-MM),显示当前日历
java.util.Calendar
介绍
Calendar 类是一个抽象类,是 java 日期处理的核心类之一。
创建对象
Calendar 类是一个抽象类,是不能实例化的,那么这个类得到一个日历实例的方法有这么两种:
1、因为是抽象方法,不能直接 new Calendar,但是可以 new 它的子类
Calendar c = new GregorianCalendar();
java.util.GregorianCalendar 是 Calendar 的子类,罗马历,即“公历”,“阳历”。
2、在中国地区,1、2两种方法相同,在某些地区,2可能会创建当地历法
Calendar c = Calendar.getInstance();
方法
今天是 2021年8月26日,我们来练习下 Calendar 的常用方法
1、getTime() 获得表示当前时间的 Date 类型实例
Calendar c = Calendar.getInstance();
System.out.println(c.getTime());
Thu Aug 26 17:16:02 CST 2021
Tips:如果想改变时间的展示格式,可以用我们上一章学到的 SimpleDateFormat 来格式化一下。
2、get(字段) 获得日期中指定字段的值
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR)); 输出:2021
System.out.println(c.get(Calendar.MONTH)); 输出:7
System.out.println(c.get(Calendar.DAY_OF_MONTH)); 输出:26
日历字段包含 YEAR、MONTH、DAY_OF_MONTH、HOUR 等,它们都是 Calendar 类的静态常量。我们使用 get() 方法就可得到。
注意点一:
现在是 8 月份,但我们看到 Calendar.MONTH 输出了 7,这是因为月份从 0 开始。所以实际中我们需要 +1。
这些字段从字面意思就能懂,更多字段可以查看 官方API
注意点二:
这里重点说一下 Calendar.DAY_OF_WEEK
。Java 中 Calendar.DAY_OF_WEEK 其实表示:一周中的第几天,所以它会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这两种情况是需要区分的:
星期日为一周的第一天 SUN MON TUE WED THU FRI SAT
DAY_OF_WEEK返回值 1 2 3 4 5 6 7
星期一为一周的第一天 MON TUE WED THU FRI SAT SUN
DAY_OF_WEEK返回值 1 2 3 4 5 6 7
例如今天周五。
Calendar ca = Calendar.getInstance();
System.out.println(ca.get(Calendar.DAY_OF_WEEK)); 输出:6
3、set(字段,值) 设置年、月、日、时、分、秒、毫秒
可以修改指定字段的值
Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR, 2019);
ca.set(Calendar.MONTH, 0);
ca.set(Calendar.DATE, 1);
ca.set(Calendar.HOUR_OF_DAY, 0);
ca.set(Calendar.MINUTE, 0);
ca.set(Calendar.SECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(ca.getTime())); 输出:2019-01-01 00:00:00
也可以同时设置年月日时分秒
Calendar ca = Calendar.getInstance();
ca.set(2019, 0, 1, 0, 0,0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(ca.getTime())); 输出:2019-01-01 00:00:00
4、add(int field,int amount) 在指定字段上加一个值
Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR, 2021);
//当前日历年份加一,一年后的今天
ca.add(Calendar.YEAR, 1);
System.out.println(ca.get(Calendar.YEAR)); //2022
//当前日历年份减一,去年今天
ca.add(Calendar.YEAR, -1);
System.out.println(ca.get(Calendar.YEAR)); //2020
我们可以通过 add 方法求 7 个月的最后一天是几号,当然后边有更简单的办法,这里只是练习使用这个方法 。
Calendar calendar = Calendar.getInstance();
//当前月份设置为8月,别忘了月份从0开始
int currentMonth = 7;
//设置8月1日
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
//8月1日减掉1天即为7月最后一天
calendar.add(Calendar.DATE, -1);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("7月的最后一天为:" + day + "号");
5、compareTo(Calendar anotherCalendar)、after(Object when)、before(Object when)
与另一个时间比较大小
当前Calendar实例大,返回正数
当前Calendar实例小,返回负数
相同大小,返回 0
Calendar cal1 = new GregorianCalendar(2022, 8, 27);
Calendar cal2 = new GregorianCalendar(2015, 8, 15);
int ret0 = cal1.compareTo(cal2);
int ret1 = cal2.compareTo(cal1);
System.out.println(ret0); // 1
System.out.println(ret1); //-1
after()、before() 函数的含义通过字面意思也能猜出来,都返回的是 boolean 值,调用 after() 函数的时间在参数之后返回 true,否则 返回 false。before() 相反。
6、getActualMaximum(int field)
获得指定字段实际最大值,可以用来获得月中最大天数。
Calendar ca = Calendar.getInstance();
//返回当前月最大天数
System.out.println(ca.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println(ca.getActualMaximum(Calendar.DATE));
//返回23
System.out.println(ca.getActualMaximum(Calendar.HOUR_OF_DAY));
//返回11
System.out.println(ca.getActualMaximum(Calendar.HOUR));
//返回当前月有多少周,返回 5
System.out.println(ca.getActualMaximum(Calendar.WEEK_OF_MONTH));
//返回当前年度最大天数,返回 365
System.out.println(ca.getActualMaximum(Calendar.DAY_OF_YEAR));
7、setTime(Date date)
setTime(Date date) 将时间设置为指定 Date 示例表示的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse("2015-08-15");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.getTime()); 输出;Sat Aug 15 00:00:00 CST 2015
} catch (ParseException e) {
e.printStackTrace();
}
8、getTimeMillis()、setTimeMillis(long millis)
这是毫秒值存取方法
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTimeInMillis()); 输出:1630027313234
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(0);//转换成格林威治时间
System.out.println(calendar.getTime()); 输出:Thu Jan 01 08:00:00 CST 1970
9、clear()
clear() 在无参数的情况下是对对象中的所有变量进行清空,清空后的时间为
Thu Jan 01 00:00:00 CST 1970
clear() 也可以附带上参数int field,表示单单清除这个数值
Calendar calendar = Calendar.getInstance();
calendar.clear(Calendar.YEAR);
System.out.println(calendar.getTime());
Thu Aug 27 09:30:14 CST 1970
举例:填写年月(yyyy-MM),显示当前日历
System.out.println("输入年月(yyyy-MM)");
String s = new Scanner(System.in).nextLine();
/* * 获取当前月1号是周几,需要用Calendar的方法 * 需把输入的字符串转成Calendar对象 */
//2021-08-->Date-->Calendar
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Date d = null;
try {
d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//新建Calendar对象,标识系统当前时间
Calendar c = Calendar.getInstance();
c.setTime(d);
int week = c.get(Calendar.DAY_OF_WEEK);
int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("日\t一\t二\t三\t四\t五\t六");
//计数变量,每7个换行1次
int count = 0;
//看是周几,然后前面先输入几个空格
for (int i = 0; i < week - 1; i++) {
System.out.print(" \t");
count++;
}
for (int i = 1; i <= max; i++) {
System.out.print(i + "\t");
count++;
if (count == 7) {
System.out.println();
count = 0;
}
}
运行结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13936.html