[2021.5.25]Java8日期处理的新特性(LocalDate)

Java8日期处理的新特性

1.获取当前的日期

java8中的LocalDate用于用于标识用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时间时就用这个类
在这里插入图片描述
在这里插入图片描述

2.获取年、月、日信息

LocalDate提供了获取年、月、日的快捷方法,其实还包括很多其它的日期属性。通过调用这些方法就可以很方便的得到需要的的日期信息,不用像以前一样需要依赖java.util.Calendar类了
在这里插入图片描述
在这里插入图片描述

3.获取特定日期

在第一个例子里,我们通过静态方法now()非常容易地创建了当天日期。我们还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期,该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没有再犯老API的设计错误,比如年度起始于1900,月份是从0开始等等。日期所见即所得,例如下边的案例
在这里插入图片描述
在这里插入图片描述

4.判断两个日期是否相同

现实生活中有一类时间处理就是判断两个日期是否相等。在项目开发的时候总会遇到这样子的问题。
下面这个例子会帮助你用java8的方式去解决,LocalDate重载了equal方法,注意,如果比较的日期是字符型的,需要先解析成日期对象再作判断
在这里插入图片描述
在这里插入图片描述

5.检查像生日这种周期性事件

java中另一个日期时间的处理就是检查类似生日、纪念日、法定假日(国庆、春节等)、或者每个月固定时间发送邮件给客户这些周期性事件
java中如何检查这些节日或其它周期性事件呢?答案是MonthDay类。这个类组合了月份和日,去掉了年,这意味着可以用它判断每年都会发生的事件。和这个类相似的还有一个YearMonth类。这些类也都是不可变并且线程安全的值类型,下面通过MonthDay来检查周期性事件
在这里插入图片描述
在这里插入图片描述

6.获取当前时间

与获取日期例子很像,获取时间使用的是LocalTime类,一个只有时间没有日期的LocalDate的近亲。可以调用静态工厂方法now()来获取当前时间。默认的格式是mm:ss:nnn。
在这里插入图片描述
在这里插入图片描述

7.在现有的时间上增加小时

java8提供了更好的plusHours()方法替换add(),并且是兼容的。注意:这些方法返回一个全新的LocalTime实例,由于其不可变性,返回后一定要用变量赋值
在这里插入图片描述
在这里插入图片描述

8.如何计算一个星期后之后的日期

和上个例子计算两小时以后的时间类似,这个例子会计算一周后的日期。LocalDate日期不包含时间信息,它的plus()方法用来增加天、周、日,ChronoUnit类声明了这些时间单位。由于LocalDate也是不变类型,返回后一定要用变量赋值
可以用同样的方法增加1个月、1年、1小时甚至一个世纪
在这里插入图片描述
在这里插入图片描述

9.计算一年前或一年后的日期

接着上面的例子我们可以通过LocalDate的plus()方法增加天数、周数或月数。这个例子我们用minus()方法计算一年前后的日期
在这里插入图片描述
在这里插入图片描述

10.使用java8的Clock时钟类

java8增加了Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。以前用到System.currentTimeMillis()和TimeZone.getDefault()的地方都可用Clock替换。
在这里插入图片描述
在这里插入图片描述

11.判断日期是早于还是晚于另一个日期

LocalDate类有两类方法isBefore()和isAfter()用比较日期,调用isBefore()方法时,如果给定日期小于当前日期则返回true
在这里插入图片描述
在这里插入图片描述

12.处理时区

java8不仅分离了日期和时间,也把时区分离出来了。现在有一系列单独的类和ZoneId来处理特定时区,ZoneDateTime类来表示某时区下的时间
在这里插入图片描述
在这里插入图片描述

13.如何体现出固定日期

例如:表示信用卡到期这类固定日期,与MonthDay检查重复时间的例子相似,YearMonth是另一个组合类,用于表示信用卡到期日、FD到期日,期货期权到期日等。
还可以用这个类得到当月共有多少天,YearMonth实例的lengthOfMonth()方法可以返回当月的天数,在判断2月有28天还是29天时非常有用
在这里插入图片描述
在这里插入图片描述

14.检查闰年

LocalDate类还有一个很实用的方法isLeapYear()判断该实例是否是一个闰年,如果你还是想重新发明轮子,还有一个代码实例,纯java逻辑编写的判断闰年的程序
在这里插入图片描述
在这里插入图片描述

15.计算两个日期之间的天数和月数

有一个常见日期操作是计算两个日期之间的天数、周数或月数。java8中可以用来java.period类来做计算。下面这个例子中,我们计算了当天和将来某一天之间的月数
在这里插入图片描述
在这里插入图片描述

16.包含时差信息的日期和时间

ZoneOffset类用来表示时区,举例来说印度与GMT或UTC标准时区相差+05:30,可以通过ZoneOffset.of()静态方法来获取对应的时区,一旦得到了时差就可以通过传入LocalDateTime和ZoneOffset来创建一个OffSetDateTime对象
在这里插入图片描述
在这里插入图片描述

17.获取当前的时间戳

Instant类有一个静态工厂方法now()会返回当前的时间戳,如下所示:
在这里插入图片描述
在这里插入图片描述

18.使用预定义的格式化工具去解析格式化日期

java8引用了全新的日期时间格式工具,线程安全而且使用方便,它自带一些常用的内置格式化工具
下面这个例子使用了BASIC_ISO_DATE格式化工具将2021年5月24日格式化成20210524
在这里插入图片描述
在这里插入图片描述
java8日期时间API的重点
1)提供了javax.time.ZoneId获取时区。
2)提供了LocalDate和LocalTime类。
3)Java8的所有日期和时间API都是不可变类并且线程安全,而现有的Date和Calendar API中的java.util.Date和SimpleDateFormat是非线程安全的。
4)主包是java.time,包含了表示日期、时间、时间间隔的一些类。里面有两个子包java.time.format用于格式化,java.time,temporal用于更底层的操作。
5)时区代表了地球上某个区域内普遍使用的标准时间。每个时区都有一个代号,格式通常由区域/城市构成(Asia/Tokyo),再加上与格林威治或UTC的时差,例如:东京的时差为+09:00。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值