demo如下:
Calendar calendar = Calendar.getInstance(); //get int i = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(i);//获取这个月的第几天,本实例为26,当前时间4/26 System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//类似上一个 //set calendar.set(Calendar.DAY_OF_MONTH,12); int j = calendar.get(Calendar.DAY_OF_MONTH); //12,改变了 System.out.println(j); //add calendar.add(Calendar.DAY_OF_MONTH,3); j = calendar.get(Calendar.DAY_OF_MONTH); //15,还是改变,增加3天 System.out.println(j); //getTime Date date = calendar.getTime(); //Thu Apr 15 03:10:28 CST 2021,返回时间戳 System.out.println(date); //setTime:Date --> Calendar calendar.setTime(date);//直接操作当前对象 int days = calendar.get(Calendar.DAY_OF_MONTH); //15 System.out.println(days);获取月份时,一月是0;获取星期几时,周日是1
2.2 JDK8中的日期时间因为之前的类具有4个问题:
可变性:例如Calendar的set,它们都是可变的
偏移性:Date中的年份都是从1900开始,月份从0开始,如果调用有参构造,会发生偏移。
格式化:格式化只对Date有用,对于Calendar则不行
线程不安全
java8中的java.time API已经纠正了过去的缺陷。
时间日期的相关packge:
LocalDate, LocalTime, LocalDateTime是其中比较重要的几个类,他们的实例均为不可变实例,使用ISO-8601日历系统。
ISO-8601日历系统是国际标准话组织制定的现代公民的日期和时间的表示法(公历)
相关方法:
上面四个层次其实就是构造、get、set、加减操作。和Calendar类似。
localDate是一个final类,有构造方法,类似String, Math,举例当前时间生成:
LocalDate localDate = LocalDate.now(); //2021-04-27 LocalTime localTime = LocalTime.now(); //19:24:37.171676500 LocalDateTime localDateTime = LocalDateTime.now(); //2021-04-27T19:24:37.171676500举例设置指定时间:
LocalDateTime localDateTime1 = LocalDateTime.of(2020,10,6,13,12,13);//2020-10-06T13:12:13举例相关get操作:
System.out.println(localDateTime.getMonth()); //APRIL System.out.println(localDateTime.getMonthValue()); //4这里的月份是从1开始的。
.with操作(设置相关属性):
LocalDate localDate1 = localDate.withDayOfMonth(22); //2021-04-22 System.out.println(localDate); //2021-04-27 System.out.println(localDate1);locatDate实例本身并没有发生变化(不可变性)。
加减操作:
LocalDate localDate2 = localDate.plusDays(4); //localDate为4-27 System.out.println(localDate2);//2021-05-01 //减的话即将Plus换位minus 2.3 Instant(瞬时)时间线上的一个瞬时点,可能用来记录应用程序中的事件时间戳。
同样是起始于1970年1月1日00:00:00的一个时间戳(纳秒级)。
相关方法:
时间标准主要有:UTC, GMT, CST,UTC时间与伦敦本地时间相同,与北京相差8个小时(早了8个小时)
Instant instant = Instant.now(); System.out.println(instant); //2021-04-27T11:45:00.321544Z,实际时间19:45,相差8个小时偏移应用:
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); //2021-04-27T19:48:17.448368100+08:00返回时间戳(毫秒数):
System.out.println(instant.toEpochMilli());//1619524168468设置特定时间,和Date类似:
Instant instant1 = Instant.ofEpochMilli(1619524168468L); //2021-04-27T11:49:28.468Z,这里的时间就是毫秒级的了 System.out.println(instant1); 2.4 DateTimeFormatter三种预定义的标准格式:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; //格式化:日期-->字符串 LocalDateTime localDateTime = LocalDateTime.now(); String str = dateTimeFormatter.format(localDateTime); //将当前时间格式化 System.out.println(str); //2021-04-27T19:59:19.0153049 //解析:字符串-->日期 TemporalAccessor temporalAccessor = dateTimeFormatter.parse("2021-04-27T19:59:19.0153049"); System.out.println(temporalAccessor);//{},ISO resolved to 2021-04-27T19:59:19.015304900本地化相关的格式: