Java 8之新日期时间API笔记(一)LocalDate
背景:
鉴于Java 8之前的日期时间API的不便捷。Java 8推出了全新的日期时间API,加上最近项目里面对日期和时间的操作比较多,所以把常用的方法整理记录到这里。
简介
新的日期时间API在java.time包下。主要的类有如下几个:
- LocalDate:表示日期类(eg:2018-06-17)
- LocalTime:表示时间类(eg: 15:23:34)
- LocalDateTime:表示日期和时间类 (eg:2018-06-17 15:23:34)
- ZoneId:用来表示时区
- Instant:用来表示时间线上的某点
- Clock:时钟类,类似其他语言中的时钟类。通过Clock可以精确获取时间
- Duration:以时分秒为单位统计时间周期
- Period:以年月日为单位统计时间周期
LocalDate
LocalDate代表了一个ISO-8601标准格式的日期(eg:2018-06-17)。他是线程安全的不可变类型。构造方法是私有的,只能通过工厂方法初始化。
常用的工厂方法如下
1.of方法:
LocalDate localDate = LocalDate.of(2018, 7, 3);
2.parse方法:
LocalDate localDate = LocalDate.parse("2018-07-03");
通过now方法快速获取系统所在时区当前日期
LocalDate localDate = LocalDate.now();
快速获取年,月,日等数据
final int year = localDate.getYear(); // 获取localDate所在年份
final Month month = localDate.getMonth(); //获取localDate所在月份
final int monthValue = localDate.getMonthValue(); //获取localDate所在月份的数字表示,range(1, 12)
final int dayOfYear = localDate.getDayOfYear(); //获取localDate当前日期是一年中第几天, range(1, 366)
final int dayOfMonth = localDate.getDayOfMonth(); //获取localDate当前日期所在月第几天,range(1, 31)
final DayOfWeek dayOfWeek = localDate.getDayOfWeek();//获取localDate当前日期是星期几
final boolean isLeapYear = localDate.isLeapYear(); //判断是否是闰年,很方便。
修改当前日期
1.修改年份
localDate = localDate.withYear(1988);//修改当前年份为1988
localDate = localDate.plusYears(1);//在当前年份上加一年
localDate = localDate.minusYears(1);//在当前年份上减一年
2.修改月份
localDate = localDate.withMonth(3);//修改当前月份为3月
localDate = localDate.plusMonths(1);//在当前月份上加一个月
localDate = localDate.minusMonths(1);//在当前月份上减一个月
3.修改日期
localDate = localDate.withDayOfMonth(3);//修改日期为当月的3号
localDate = localDate.withDayOfYear(133);//修改日期为当年的第133天
localDate = localDate.plusDays(1);//在当前日期上加一天
localDate = localDate.plusWeeks(1);//在当前日期上加一周
localDate = localDate.minusWeeks(1);//在当前日期上减一周
localDate = localDate.minusDays(1);//在当前日期上减一天
4.日期比较
int result = localDateA.compareTo(localDateB);//A > B => result > 0; A == B => result == 0; A < B => result < 0;
localDateA.isBefore(localDateB);
localDateA.isAfter(localDateB);
localDateA.isEqual(localDateB);
long period = localDateA.toEpochDay() - localDateB.toEpochDay();//获取两个日期相差多少天
5.时间调整者
有的时候我们需要的时间不是一些确定的时间,而是一些概念上的。比如这个月的第一天,最后一天,下个周末等等。新版的Java日期API提供了这样获取时间的方式就是TemporalAdjusters类。
localDate = localDate.with(TemporalAdjusters.firstDayOfMonth()); //获取本月第一天
localDate = localDate.with(TemporalAdjusters.lastDayOfYear());//获取今年最后一天
Ps:TemporalAdjusters还提供了很多方法,如果还不能满足需求可以自己实现TemporalAdjuster接口
6.获取本地星期
有时候我们需要给本地用户提供可以理解的星期表示,DayOfWeek通过传入Locale可以返回用户可以理解的星期字符串
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
String displayName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);//eg:星期三
总结
新版的Java时间API非常好用,以前很多需要自己编写代码处理的地方,现在都直接提供了API。这篇主要学习LocalDate的使用,还有很多需要学习的地方,下一篇学习LocalTime的使用方法。