java.time包优雅处理时间和日期

目录

一 java.time背景

二 java.time重点类

三 java.time基本操作

3.1 创建日期

3.2 创建时间

3.3 创建日期和时间

3.4 获取年 

3.5 获取月

3.6 获取日

3.7 获取时

3.8 获取分

3.9 获取秒 

四 java.time日常应用

4.1  Instant 与 Date 互转

4.2 LocalDateTime 与 Date 互转

4.3 日期时间格式化输出

4.4 时间进行比较

4.5 加法操作和减法操作

 4.6 计算日期时间差

五 总结遇到的坑

5.1 Period.getDays() 方法

5.2 Date.getTime() 方法


java.time背景

用过 java.util.Date 和 java.sql.Date 的或多或少都会觉得这这两个日期 API 包设计的太不友好,太反人类。比如:

  • 什么 java.util.Date 是可变类型;
  • SimpleDateFormatter 不是线程安全的;
  • 甚至 java.util.Date 月份从0开始,一月是0,十二月是11等等。

为了解决这些痛点,Java 8 的 java.time 包出现了,该包下的所有类都是不可变类型,而且都是线程安全的。

你可能会发现该包的很多 API 与 JodaTime 类似,因为 Java 8 的时间包设计参考了 JodaTime 设计。

二 java.time重点类

下面我们简单了解一下java.time包下一些重点类:

Clock:时钟,比如获取当前中国北京的时间。

Instant:时间戳。

Duration:持续时间,用于计算时间差。

LocalDate:只包含日期,比如:2021-01-17 。

LocalTime:只包含时间,比如:14:15:10。

LocalDateTime:同时包含日期和时间,比如:2021-01-170 14:15:10。

Period:时间段,用于计算时间差。

ZoneOffset:时区偏移量,比如:+8:00。

ZonedDateTime:带时区的时间。

java.time包下,其他都是一些很简单的类,都是比较见名知意的。

三 java.time基本操作

3.1 创建日期

//当前日期
LocalDate localDate =  LocalDate.now();
//指定日期
LocalDate localDate = LocalDate.of(2021, 01, 17);

3.2 创建时间

//当前时间
LocalTime localTime1 =  LocalTime.now();
//指定时间
LocalTime localTime2= LocalTime.of(15, 11, 15);

3.3 创建日期和时间

LocalDateTime localDateTime = LocalDateTime.now();

3.4 获取年 

//今年
int now = LocalDate.now().getYear()
//明年
int after = LocalDate.now().plusYears(1).getYear();
//去年
int before = LocalDate.now().minusYears(1).getYear();

3.5 获取月

//这个月
int now = LocalDate.now().getMonthValue()
//下个月
int after = LocalDate.now().plusMonths(1).getMonthValue();
//上个月
int before = LocalDate.now().minusMonths(1).getMonthValue();

3.6 获取日

//今天
int
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值