在编写riqi日期的时候我们发现Date类中很多的方法过时了,那么如何获取年月日呢?接下来的功能就交给Calendar类。
Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
使用方法:
Calendar c=Calendar.getInstance();
创建对象之后我们就可以使用对象进行一系列的操作了。
具体功能表示如下:
方法 | 描述 |
---|---|
void add(int field, int amount) | 根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount |
boolean after(Object when) | 判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果 |
boolean before(Object when) | 判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果 |
void clear() | 清空 Calendar 中的日期时间值 |
int compareTo(Calendar anotherCalendar) | 比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0 |
int get(int field) | 返回指定日历字段的值 |
int getActualMaximum(int field) | 返回指定日历字段可能拥有的最大值 |
int getActualMinimum(int field) | 返回指定日历字段可能拥有的最小值 |
int getFirstDayOfWeek() | 获取一星期的第一天。根据不同的国家地区,返回不同的值 |
static Calendar getInstance() | 使用默认时区和语言坏境获得一个日历 |
static Calendar getInstance(TimeZone zone) | 使用指定时区和默认语言环境获得一个日历 |
static Calendar getInstance(TimeZone zone, Locale aLocale) | 使用指定时区和语言环境获得一个日历 |
Date getTime() | 返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象 |
long getTimeInMillis() | 返回此 Calendar 的时间值,以毫秒为单位 |
void set(int field, int value) | 为指定的日历字段设置给定值 |
void set(int year, int month, int date) | 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值 |
void setFirstDayOfWeek(int value) | 设置一星期的第一天是哪一天 |
void setTimeInMillis(long millis) | 用给定的 long 值设置此 Calendar 的当前时间值 |
Calendar 类中定义了许多常量,分别表示不同的意义。
例如,要获取当前月份可用如下代码:
int month=Calendar.getInstance().get(Calendar.MONTH);
和Date一样如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。
以下是对Calender使用的示例:
Calendar calendar = Caiendar.getlnstance(); //如果不设置时间,则默认为当前时间
caiendar.setTimefnew Date(); //将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:" + calendar.getTime()); //获取当前时间
int year = calendar.get(Calendar.YEAR); //获取当前年份
System.out.println("现在是" + year + "年");
int month = calendar.get(Calendar.MONTH) + 1; //获取当前月份(月份从 0 开始,所以加 1)
System.out.print(month + "月");
int day = calendar.get(Calendar.DATE); //获取日
System.out.print(day + "日");
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; //获取今天星期几(以星期日为第一天)
System.out.print("星期"+week);
int hour=calendar.get(Calendar.HOUR_OF_DAY); //获取当前小时数(24 小时制)
System.out.print(hour+"时");
int minute = calendar.get(Calendar.MINUTE); //获取当前分钟
System.out.print(minute+"分");
int second = calendar.get(Calendar.SECOND); //获取当前秒数
System.out.print(second+"秒");
int millisecond = calendar.get(Calendar.MILLISECOND); //获取毫秒数
System.out.print(millisecond+"毫秒");
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); //获取今天是本月第几天
System.out.println("今天是本月的第 "+dayOfMonth+" 天");
int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); //获取今天是本月第几周
System.out.println("今天是本月第 "+dayOfWeekInMonth+" 周");
int many = calendar.get(Calendar.DAY_OF_YEAR); //获取今天是今年第几天
System.out.println("今天是今年第 "+many+" 天");
Calendar c = Calendar.getInstance();
c.set(2012/8/8); //设置年月日,时分秒将默认采用当前值
System.out.println("设置日期为 2012-8-8 后的时间:"+c.getTime()); //输出时间
Calendar instance = Calendar.getInstance();
System.out.println(instance.getTime());
instance.add(Calendar.MONDAY, 2);
System.out.println(instance.getTime());
结果:
Tue Jun 02 17:55:56 CST 2020
Sun Aug 02 17:55:56 CST 2020
获取当前时间:
LocalDate lo =LocalDate.now();
System.out.println(lo);
2020-06-02
获取当前时间:
LocalTime lo = LocalTime.now();
System.out.println(lo);
18:27:08.840
可以看出LocalDate获取的时间是年月日,localTime获取的时间是时分秒。
设置时分秒:
LocalTime lo = LocalTime.of(01,11,1);
System.out.println(lo);
运行结果
01:11:01
获取当前时间:
LocalDateTime lo2 =LocalDateTime.now();
System.out.println(lo2);
2020-06-02T18:28:29.121
而localDateTime获取的时间是完整的。
重新设置所有时间可以用localDateTime。
LocalDateTime lo1 =LocalDateTime.of(2012,01,12,11,01,01);
System.out.println(lo1);
结果:
2012-01-12T11:01:01
计算两个时间差的时候可以用 Duration类,但这个封装类里没有年。
LocalDateTime lo1 =LocalDateTime.of(2012,01,12,11,01,01);
System.out.println(lo1);
LocalDateTime lo2 =LocalDateTime.of(2013,01,12,11,01,01);
System.out.println(lo2);
Duration between = Duration.between(lo1, lo2);
System.out.println(between.toDays());
结果:
2012-01-12T11:01:01
2013-01-12T11:01:01
366
如果想计算年差的话则可以用 Period。
LocalDate lo = LocalDate.now();
System.out.println(lo);
LocalDate lo3 = LocalDate.of(2020, 6, 5);
System.out.println(lo3);
System.out.println( Period.between(lo,lo3 ).getDays());
//LocalDate lo = LocalDate.now();
// System.out.println(lo);
// LocalDate lo3 = LocalDate.of(2022, 6,2);
// System.out.println(lo3);
//
//
// System.out.println( Period.between(lo,lo3 ).getYears());
2020-06-02
2020-06-05
3
这个是注释的结果。
//2020-06-02
//2022-06-02
//2
但是 Period.between()中的两个参数是 localDate对象。
Period用来计算 年月日
Duration用来计算 日时分秒