java中Calendar类的常见操作

​Calendar 日历类是一个抽象类,使用Calendar的getInstance()取得一个Calendar的实例,他还有一个子类
GregorianCalendar公历类,可以再构造中指定年月日时分秒等
日期差工具类https://github.com/ai-sx/java/blob/main/src/CalendarUtil.java

  • 获取常用值

    • cal.get(Calendar.YEAR)//年
    • cal.get(Calendar.MONTH) + 1 //月
    • cal.get(Calendar.DATE)//日,和DAY_OF_MONTH一样
    • cal.get(Calendar.HOUR_OF_DAY)// 时
    • cal.get(Calendar.MINUTE)// 分
    • cal.get(Calendar.SECOND)// 秒
    • cal.get(Calendar.DAY_OF_WEEK)// 星期[2,3,4,5,6,7,1]
    • cal.get(Calendar.DAY_OF_YEAR)// 已过天数
    • cal.get(Calendar.WEEK_OF_MONTH) //本月的第多少周,和WEDNESDAY一样
    • cal.get(Calendar.WEEK_OF_YEAR)// 已过周数(周运算)
    • cal.getActualMaximum(Calendar.DATE) //获取当月的最大天数,其余同理
    • cal.getActualMinimum(Calendar.DATE) //获取当月的最小天数,其余同理
    • cal.getWeeksInWeekYear // 今年周数
    • cal.getTimeInMillis(),cal.setTimeInMillis() // 获取,设置毫秒数
    • cal. getTime(),cal.setTime() / /获取,设置对应的Date对象
    • cal.toInstant // 获取Instant实例
    • gcal.isLeapYear(year) // 判断是否是闰年
  • 设置值

    • cal.set(2013, 5, 4);//年月日
    • cal.set(2020, 9, 7, 20, 36, 37);//年月日时分秒
    • cal.set(Calendar.YEAR, 2014)// 设置年,其余同理
  • 运算值

    • cal.add(Calendar.YEAR, 1)//增加年,相减是使用负数,其余同理
    • cal.after(cal2) // 比较cal是否再cal2后,before同理

LocalDate

日期API,通过LocalDate.now()获取实例,与之对应的是时间API LocalTime,二者使用方式基本相同,当然还有二则结合的日期时间API LocalDateTime,综合了以上二者的方法

LocalDate(yyyy-MM-dd)
  • getYear,getMonthValue,getDayOfMonth,getDayOfWeek…getValue() // 获取年月日以及星期

  • LocalDate> of(year,month,day),ofEpochDay(day(1970))[与之对应的是toEpochDay],LocalDate.ofYearDay(year,dayofyear) // 指定年月日或者天数获得对象

  • format(DateTimeFormatter.ofPattern(“yyyy-MM-dd”)); //日期格式化 ,其余同理

  • date.plusYears(1) //返回增加1年的副本,原对象无影响,其余同理

    date.plus(100, ChronoUnit.DAYS) //等价于date.plusYears(100)
    
  • date.minusYears(1) //返回减少一年的副本,原对象无影响,其余同理

  • equals,compareTo,isBefore,isAfter //日期的比较

  • with,withYear,withMonth,withDayOfMonth,withDayOfYear // 返回修改年月日后的副本,原对象无影响

    LocalDate.now().with(Month.JANUARY) // 获取一月对应的日期,等价于withMonth(1)
    LocalDate.now().minusDays(7).with(DayOfWeek.MONDAY) // 获取上个星期一对应的日期
    
  • date.lengthOfYear() // 得到一年的天数

  • date.lengthOfMonth() // 得到一月的天数

  • date.isLeapYear() // 检查今年是否是闰年

  • date.atTime(LocalTime | 时,分,秒) // 返回结合时间的LocalDateTime

LocalTime(HH:mm:ss.毫秒)
  • time.toSecondOfDay() //获取当天时间所使用的秒数
LocalDateTime
  • LocalDateTime.now().toLocalDate() //获取LocalDate对象
  • LocalDateTime.now().toLocalTime() // 获取LocalTIme对象
Instant

在时间线上的瞬间点,适用于表示毫秒,now()获取当前时间差

  • Instant.ofEpochSecond(100) // 从秒中获取实例,1S = 1000ms
  • Instant.ofEpochMilli(100); // 从毫秒中获取实例
  • atZone(ZoneId.systemDefault()).toLocalDate() // 可以通过Instant获取LocalDate等实例
  • toEpochMilli() // 获取毫秒数,如下都可以获取毫秒数
System.out.println(System.currentTimeMillis());
System.out.println(new Date().getTime());
System.out.println(instant.toEpochMilli());	
System.out.println(Calendar.getInstance().getTimeInMillis());
Date

获取当前日期时间对象,可以指定带毫秒数的有参构造

  • getTime()
  • toInstant()
  • after,before,compareTo,equals,clone
  • Date.from(Instant.now())
Date与LocalDateTime,LocalTime,LocalDate的互转

Instant是连接Date和LocalDateTime,LocalTime,LocalDate之间的桥梁

Instant instant = new Date().toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDate localDate = LocalDate.ofInstant(instant, zone);// 转LocalDate,LocalTime同理
LocalDateTime localDateTime = LocalDateTime. (instant, zone);// 转LocalDateTime
Date.from(dateTime.atZone(zone).toInstant()) // LocalDateTime转Date方式
ZonedDateTime zonedDateTime = localDate.atStartOfDay(zone);
ZonedDateTime zonedDateTime = localDate.atStartOfDay().atZone(zone)
Date.from(zonedDateTime.toInstant()) //LocalDate转Date
// 也可以将LocalDate转为LocalDateTime,LocalTime同理
LocalDateTime.of(localDate, localTime); //转LocalDateTime方式1
localTime.now().atDate(localDate)//转LocalDateTime方式2
日期时间差操作
// 日期差操作
Period between = Period.between(LocalDate.now(), LocalDate.of(2018,11,1));
System.out.println(between); // P-1Y-11M-6D 两个日期的时日期差的日期
System.out.println(between.getYears()); // -1 
System.out.println(between.getMonths());// -11
System.out.println(between.getDays());// -6
System.out.println(between.negated());// P1Y11M6D 去取反
// 时间差操作
Duration between1 = Duration.between(LocalTime.now(), LocalTime.of(9, 38, 11));
System.out.println(between1);// PT-13H-4M-6.7925839S 两个时间的时间差的时间
System.out.println(between1.toHours()); // -13
System.out.println(between1.toMinutes()); // -787
System.out.println(between1.toSeconds());// -47264
System.out.println(between1.getSeconds()); // PT-13H-4M-6.7925839S
System.out.println(between1.toMillis()); // 毫秒数
//毫秒操作获取两个时间段相差的天数和小时数
int days = (int) ((new Date().getTime() - new Date(1000).getTime()) / (1000*3600*24));
int hours = (int) ((new Date().getTime() - new Date(1000).getTime()) / (1000*3600));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息技术王凤龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值