java8的新特性-新的日期API-LocalDate的用法笔记

在java8的新特性中,新的日期API是挺容易被忽略的一个,因为原来的Date类用的太久了,很多人都懒得改习惯了。而且很多项目中对应数据库的实体类也是Date。所以要用localDate的话,真的不是一件想用就用的事情。但是新的日期API在我了解后发现有很多官方的方法挺有用的,而且还是线程安全的。嗯,看来推出来还是比较有诚意的。先学习学习。大不了为了用这些方法,先把Date转换为localDate,求出结果后再返回Date。

下面来看看localDate的常用方法吧。

首先来看看怎么获取当前时间吧。在新的日期API中获取时间有3个类,分别是LocalDate,LocalDateTime,LocalTime。日期和时间的获取是可以分开的,也可以一起获取。

LocalDate today = LocalDate.now();
System.out.println(today);
//输出2019-08-11
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//输出2019-08-11T17:42:09.925
LocalTime time = LocalTime.now();
System.out.println(time);
//输出17:45:05.032

细心的你可能会发现LocalDateTime的输出中会有一个T在中间。这个是为什么呢?

我百度了以后发现原来新的日期API遵循了国际标准化组织的国际标准ISO 8601,ISO 8601是日期和时间的表示方法。合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。

所以LocalDateTime类里面的toString()方法就手动加上了T。

然后我们看看localDate的一些官方的方法

LocalDate date = LocalDate.parse("2019-08-11");
System.out.println(date);//2019-08-11 通过字符串生成日期的方法,字符串要格式正确,而且日期必须是正确存在的。
LocalDate date1 = LocalDate.ofYearDay(2019, 200);
System.out.println(date1);//2019-07-19 输出该年份的第N天的日期
LocalDate date2 = LocalDate.of(2018, 11, 22);
System.out.println(date2);//2018-11-22 根据年月日来生成日期
int lengthOfMonth = date.lengthOfMonth();
System.out.println(lengthOfMonth);//31 获取该月份总共有多少天
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println(dayOfWeek);//SUNDAY 获取该日期是星期几,返回英文
LocalDateTime dateTime = date.atStartOfDay();
System.out.println(dateTime);//2019-08-11T00:00 获取该日期的开始时间,好像没什么用。
LocalDate date3 = date.plusDays(3);
System.out.println(date3);//2019-08-14 获取该日期后第3天的日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String format = date3.format(formatter);
System.out.println(format);//20190814 对日期按照给定的格式来格式化
LocalDateTime dateTime1 = date.atTime(5, 5, 5);
System.out.println(dateTime1);//2019-08-11T05:05:05 输出此日期的某个时间,感觉也没啥用。
int dayOfYear = date.getDayOfYear();
System.out.println(dayOfYear);//223 输出该日期是今年的第几天,可能有点用
boolean leapYear = date.isLeapYear();
System.out.println(leapYear);//判断此日期的年份是否为闰年
boolean before = date.isBefore(date2);
System.out.println(before);//判断此日期是否在指定日期之前
boolean after = date.isAfter(date2);
System.out.println(after);//判断此日期是否在指定日期之后

然后是LocalDateTime的一些方法

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2019-08-16T19:54:33.256 生成当前时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:dd");
String format = dateTime.format(formatter);
System.out.println(format);// 19:54:16 获取时间,不包括日期
LocalDateTime dateTime1 = dateTime.withHour(4);
System.out.println(dateTime1);//2019-08-16T04:54:33.256 将时间的小时替换为输入值,输入值有范围限制,0~23
LocalDateTime dateTime3 = dateTime.withMonth(11);
System.out.println(dateTime3);//2019-11-16T19:54:33.256 将时间的月份替换为输入值,有范围限制
LocalDateTime dateTime2 = dateTime.minusHours(1);
System.out.println(dateTime2);//2019-08-16T18:54:33.256 将时间减少一个小时,对应的也有分钟,秒的方法
LocalDateTime dateTime4 = dateTime.plusHours(2);
System.out.println(dateTime4);//2019-08-16T21:54:33.256 将时间增加两个小时
LocalDate date = dateTime.toLocalDate();
System.out.println(date);//2019-08-16 由时间获取到日期
int hour = dateTime.getHour();
System.out.println(hour);//19 获取该时间的小时
Month month = dateTime.getMonth();
System.out.println(month);//AUGUST  获取该时间的月份名称,这里是英文的。。。
int monthValue = dateTime.getMonthValue();
System.out.println(monthValue);//8 获取到该时间的月份值
int i = date.lengthOfYear();
System.out.println(i);//365 获取该时间的年份有多少天

尝试完,发现方法还是挺全的,虽然有些方法不常用,但是还是封装了。还是比较用心的。但是要想在项目中完全从Date换到LocalDate还是不太现实。可以通过字符串来转换成LocalDate来使用新的方法。也是可以比较省时间吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值