对于LocalDate的测试
java8新增了许多,其中常用的时间类 TestLocalDate LocalTime LocalDateTime,都是不可变且线程安全的
原来的Date和Calenter有许多缺陷,新加入的3个类更加安全,并且3个的功能也分开了
1 : LocalDate :专门处理日期 LocalDate是不可变且线程安全的
2 : LocalTime :专门处理时间 LocalTime也是不可变且线程安全的
3 : LocalDateTime : 可以说是 上面二者的结合, 同样是线程安全且不可变的
import java.time.LocalDate;
import java.time.Clock;
public class TestLocalDate {
public static void main(String[] args){
//第一种构造方法,从时钟获取日期 ,无参的话就是默认系统的时钟 2018-12-18
LocalDate date1= LocalDate.now();
System.out.println(date1);
//这种写法和上面一样,就是获取了当前时区的时钟
LocalDate dat = LocalDate.now(Clock.systemUTC());//Clock.systemDefaultZone()
System.out.println(dat);
//第二种构造方法,指定年月日来构造日期
LocalDate date2 = LocalDate.of(2018,2,4);
System.out.println(date2);
//第三种构造方法,传入一个long类型的数,该时间是从1970 -01-01月开始计算的
LocalDate date3 = LocalDate.ofEpochDay(123132);
System.out.println(date3);
//第四种构造方法,指定一个文本字符串,从这个文本字符串种读取时间,但是这个文本字符串必须符合标准
//即使将 03 改为 3 也不行
LocalDate date4 = LocalDate.parse("2000-12-03");
System.out.println(date4);
//具体的方法
System.out.println(date1.getMonth()); //返回当前日期的月份
System.out.println(date1.getYear()); //返回当前日期的年份
System.out.println(date1.getDayOfMonth());//返回当前日期的天数是这个月的第几天
System.out.println(date1.getDayOfYear());//返回当前日期的天数是这一年中的第几天
System.out.println(date1.getDayOfWeek());//返回当前日期的天数是这个周的星期几
System.out.println(date1.lengthOfMonth());//返回当前日期的月份有多少天
System.out.println(date1.lengthOfYear());//返回当前日期的年份有多少天
//以 with 的方法的作用是 改变当前的时间的某个字段,并返回副本,所以可以连续的调用
//打印 2020-04-18 // 一年中的第几天 //一个月中的第几天 //几月 //几年
System.out.println(date2.withDayOfYear(200).withDayOfMonth(18).withMonth(4).withYear(2020));
//利用上述方法,可以计算当前日期离今年结束还有多少天,因为没有具体的时间信息,所以暂时只是粗略的计算天数
System.out.println("今天离今年结束还有:" + (date1.lengthOfYear() - date1.getDayOfYear()) + "天");
//LocalDate转为LocalDateTime的方法
// 1 ://以当前日期的开始,创建一个从0点开始的新日期,2018-12-18 0点0分0秒
System.out.println(date1.atStartOfDay());
// 2 :指定具体的时间
System.out.println(date1.atTime(5,3,2));
//判断一个时间是否在另一个时间的后面
System.out.println(date1.isAfter(date2));
//判断一个时间是否在另一个时间的前面
System.out.println(date1.isBefore(date2));
//判断一个时间是否与另一个时间相等 (euqals也可以)
System.out.println(date1.isEqual(date2));
//LocalDate还提供了一些常规算法 : 加 , 减
//因为是不可变类且返回值为LocalDate,所以可以连续计算
//+法
System.out.println(date1.plusDays(123).plusMonths(2).plusYears(20));
//-法
System.out.println(date1.minusDays(123).minusMonths(2).minusYears(20));
//最后一个方法, 带年份的日期类,基本都支持,判断是否是闰年
System.out.println("今年是否为闰年 : " + date1.isLeapYear());
}
}
更多的详细知识,可以去查阅官方文档,毕竟是最权威的
java11 java.time包的官方文档
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html
这里是是我其他几个简单的测试:
LocalTime:https://blog.csdn.net/qq_42394457/article/details/85086452
LocalDateTime:https://blog.csdn.net/qq_42394457/article/details/85086470
Period:https://blog.csdn.net/qq_42394457/article/details/85086491
MonthDay:https://blog.csdn.net/qq_42394457/article/details/85086483
ZonedDateTime:https://blog.csdn.net/qq_42394457/article/details/85086643
格式化 DateTimeFormatter: https://blog.csdn.net/qq_42394457/article/details/85086717