java 常用类库:时间类LocalDate;LocalTime;LocalDateTime;Calendar 类;Date ;
LocalDate类
LocalDate类代表不带时区的日期,列入2020-12-20。该类提供了静态的now()方法来获取当前的日期。这个类是线程安全的。
LocalTime类
代表不带时区的时间,例如10:20:30。该类提供了静态的now()方法来获取来获取当前的时间。这个类是线程安全的。
LocalDateTime类
LocalDateTime类代表不带时区的日期,时间,列入2020-12-20T10:15:15。该类提供了静态的now方法来获取对应的时间日期。这个类是线程安全的。
代码示例:
package com.zmd.common_class_libraries; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; /** * @ClassName LocalDateTime * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/7. */ public class LocalDateTimeExample { public static void main(String[] args) { //当前日期 LocalDate localDate = LocalDate.now(); System.out.println(localDate); //2021-04-07 //指定日期:某年的第多少天 LocalDate localDate1 = LocalDate.ofYearDay(2021,365); System.out.println(localDate1);//2021-12-31 //获取指定年月日时间 LocalDate localDate2 = LocalDate.of(2021,5,1); System.out.println(localDate2); //2021-05-01 //当前时间 LocalTime localTime = LocalTime.now(); System.out.println(localTime); //指定时间 localTime = LocalTime.of(22,0,0,0); System.out.println(localTime); //一天中的第多少秒 localTime = LocalTime.ofSecondOfDay(86399); System.out.println(localTime); //23:59:59 //日期时间LocalDateTime类: LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime); //2021-04-07T22:22:16.560556800 //时间加减,不改变对象自身,需要获取返回值 LocalDateTime localDateTime1 = localDateTime.plusHours(5).plusMinutes(3); System.out.println(localDateTime1); //2021-04-08T03:25:16.560556800 } }
Calendar 类
实例创建方法Calendar.getInstance();
实例方法
getTime() 获取时间戳;
add()时间计算;
roll()时间计算超出范围走默认值;
getActualMaximum; getActualMinimum获取最大最小值
package com.zmd.common_class_libraries; import com.sun.jdi.PathSearchingVirtualMachine; import java.util.Calendar; /** * @ClassName CalendarExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/7. */ public class CalendarExample { public static void main(String[] args) { //Calendar 类为抽象类,不可以new 需要使用静态方法getInstance返回实例 Calendar calendar = Calendar.getInstance(); //获取当前日期 System.out.println(calendar.getTime()); //日期计算,改变对象本身 calendar.add(Calendar.DATE, -1); System.out.println(calendar.getTime()); //获取时间对应的年、月、本月第几天、是当天第几个小时 System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH)); System.out.println(calendar.get(Calendar.DATE)); System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); //获取指定字段的最大值最小值:月份0~11 System.out.println(calendar.getActualMaximum(Calendar.MONTH)); System.out.println(calendar.getActualMinimum(Calendar.MONTH)); //日期计算roll和add一样,但是超出当天或者当年月时间不会向上进位 calendar.add(Calendar.DAY_OF_MONTH,26); System.out.println(calendar.getTime()); } }
set
设置对应年月字段
// set设置月份默认超出对应合理范围会自动进位 calendar.set(Calendar.MONTH,20); //设置20月,会自动进位到次年 System.out.println(calendar.getTime()); //Tue Sep 06 18:19:24 CST 2022
关闭容错
//配置不允许自动容错 calendar.setLenient(false); calendar.set(Calendar.MONTH,20); //关闭进位,再设置20月,抛出异常 //Exception in thread "main" java.lang.IllegalArgumentException: MONTH System.out.println(calendar.getTime());
Calendar set方法的延迟修改策略
当执行set()方法设置时间对象更改某个字段后,并没有马上对原有实例修改,而是在下一次调用get、getTime、或者getTimeMillis方法的时候才做update更新修改后的时间。
set(int field, int value)的方法是将指定的字段修改为value,它的实现原理,其实是将Calendar类的isSet变量对应的字段设置为了true,来存储某个字段是否被设置过。在用一个isTimeSet字段来存放我们的时间应不应该要修改?
然后,我们再调用,get, getTime或者getTimeInMillis方法的时候,判断如果isTimeSet为false,会重新计算时间。
这样做的好处是什么?比如,我们set了100次,之后,我们突然get了一次,这个时候,我们就仅仅在get的时候才计算了一下时间(1次)。如果不这样做,每次set的时候,就应该计算时间(100次),这样就节约了我们的资源
---------------------------------------------------------------
Date类 已过时
构造时间对象
当前时间Date()
指定时间Date(毫秒时间戳)
方法:
getTime() 时间对象的时间戳,默认传入的是System.currentTimeMillis()
setTime(long time) 设置时间对象的时间戳
before/after 判断传入的时间是否在本时间实例的前或后。
package com.zmd.common_class_libraries; import java.util.Date; /** * @ClassName DateTimeExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/7. */ public class DateTimeExample { public static void main(String[] args) { //当前时间戳毫秒数 System.out.println(System.currentTimeMillis()); //Date()获取当前时间 Date nowDate = new Date(); System.out.println(nowDate); //判断时间对象是否在指定时间之后 Date when = new Date(System.currentTimeMillis() - 7200 * 1000); System.out.println(when); System.out.println(nowDate.after(when));; //判断时间对象是否在指定时间之前 System.out.println(nowDate.before(when));; //通过时间对象获取时间对象的时间戳 System.out.println(nowDate.getTime()); //对比测试 System.out.println(System.currentTimeMillis()); //设置时间戳,比如设置24小时之后的 nowDate.setTime(System.currentTimeMillis() + 24 * 3600 * 1000); System.out.println(nowDate); } }
posted on 2021-04-07 19:48 zhangmingda 阅读(400) 评论(0) 编辑 收藏 举报