LocalDateTime计算天数和时间差
LocalDateTime now = LocalDateTime.parse("2021-12-21 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime end = LocalDateTime.parse("2022-03-21 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
long until = now.until(end, ChronoUnit.DAYS);//1.相差的天数
Duration duration = Duration.between(now,end);
long days = duration.toDays(); //2.相差的天数
System.out.println(days);
以下是Jdk1.7存在的问题以及Jdk1.8新特性
Jdk1.7的问题
在Jdk1.8版本发布了新的Date-Time API来加强对时间、日期的处理。这是因为在Jdk1.7中时间、日期的处理上存在如下的一些问题。
非线程安全。Date类是非线程安全的,这是Java时间日期类中最大的问题。
设计很差。①在java.util包和java.sql包下都有时间日期类Date,java.util.Date同时包含时间和日期,而java.sql.Date只包含日期,在不同的包设计了相似的功能,而且这两个类具有相同名字,这是一种非常糟糕的设计;
②Date类在java.util包下,而Date类的格式化和解析类SimpleDateFormat在java.text包下;
③日期类不提供国际化,没有时区支持。
Jdk1.8新提供的API
为了解决上面的问题,Jdk1.8在java.time包下提供了很多新的API。新的java.time包涵盖了所有处理日期、时间、时区、时刻(instants)、过程(during)与时钟的操作。比较重要的两个API:Local(本地)和Zoned(时区)。Local简化了时间、日期的处理,没有时区问题,Zoned通过制定的时区处理时间日期。我们在处理时间、日期的时候会常用的3个类,LocalDate、LocalTime、LocalDateTime,这三个类都是final类。这三个类的使用方法差不多,看懂一个类的使用,其他的两个类和这个类的使用差不多。
LocalDate、LocalTime、LocalDateTime
创建对象
静态方法now()
在创建LocalDateTime、LocalDate、LocalTime对象的时候,推荐使用实例方法.now()来实例化,now()方法是获取当前日期和时间。例如
LocalDateTime currentTime = LocalDateTime.now();
System.out.println(currentTime);
2020-12-23T14:11:53.943
LocalDate的方法
LocalTime的方法
LocalDateTime的方法
实例方法:上面LocalDate、LocalTime提供的get、with、minus、plus、equals、compareTo这些方法在LocalDateTime中都有。
一般来讲用的比较多的还是LocalDateTime类。
DateTimeFormatter
用于LocalDateTime、LocalDate、LocalTime和字符串的转换。
字符串→日期时间类
String dateTime = "2021-01-05 12:00:00";
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(dateTime, df);
日期时间类→字符串
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTime = ldt.format(df);
Duration
用于计算两个日期时间类对象的差值
String dateTime1 = "2021-01-05 12:00:00";
String dateTime2 = "2021-01-07 11:00:00";
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt1 = LocalDateTime.parse(dateTime1, df);
LocalDateTime ldt2 = LocalDateTime.parse(dateTime2, df);
System.out.println(ldt1.format(df));
System.out.println(ldt2.format(df));
Duration duration = Duration.between(ldt1, ldt2);
Long days = duration.toDays();
System.out.println(days);
除了转换成天数的方法还有转换小时、分钟等等的方法。
小结
获取当前时间:LocalDateTime.now()
自定义时间:LocalDateTime.of(参数列表)
获取LocalDateTime对象的时间数据:get方法
修改LocalDateTime对象的时间数据:with方法
时间的相加:plus方法
时间的相减:minus方法
判断时间相等:equals方法
判断当前时间是否在某个时间之前:isBefor(LocalDateTime other)
判断当前时间是否在某个时间之后:isAfter(LocalDateTime other)
时间转换成字符串:toString()
字符串转换成时间:parse()