Java 8 新的日期时间操作API

Java 8 新的日期时间API

新的日期时间API,这儿只是些常用的API,剩下的操作其实有很多,JDK给我们提供了非常丰富的API操作,使其更加方便,更加灵活。

包括:新老日期时间之间的转换
如:date 和 LocalDateTime、LocalTime、LocalDate、Instant 之间的转换


Java8对日期时间的处理提供了新的API,在 java.time包下面

新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。

API

Java 8 对日期时间处理提供了两个比较重要的API:

Local(本地),简化了日期处理,没有时区

Zoned(时区),制定时区

时区有无Local(无时区)Zoned(时区)
日期LocalDate
日期时间LocalDateTimeZonedDateTime
时间LocalTime
时刻Instant

简单使用

LocalDateTime
获取当前日期时间
// 获取 当前的 日期时间
LocalDateTime time = LocalDateTime.now();
// 2021-04-18T10:16:20.630
System.out.println(time);
格式化输出
// 日期时间格式化
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 2021-04-18 10:16:20
System.out.println(time.format(format));
解析字符串时间
// 字符串时间的格式,必须保持一致
// 转 LocalDateTime 必须是 日期+时间
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
// 对字符串时间,进行转换
LocalDateTime date = LocalDateTime.parse("2020/08/01 10:30", dateFormat);
// 2020-08-01T10:30
System.out.println(date);
自定义日期时间
// 自定义时间日期
LocalDateTime customDateTime = LocalDateTime.of(2021, 10, 01, 8, 0, 0);
// 2021-10-01T08:00
System.out.println(customDateTime);
转LocalDate
// 转LocalDate 只有日期
LocalDate localDate = time.toLocalDate();
// 2021-04-18
System.out.println(localDate);
转LocalTime
// 转LocalTime 只有时间
LocalTime localTime = time.toLocalTime();
// 10:37:42.419
System.out.println(localTime);
转Instant
// 转Instant
// time: 2021-04-18T10:48:29.919
Instant instant = time.toInstant(ZoneOffset.UTC);
// 2021-04-18T10:48:29.919Z
System.out.println(instant);

//使用默认时区 +08:00 = ZoneOffset.UTC
ZoneOffset offset = OffsetDateTime.now().getOffset();
// +08:00
System.out.println(offset);
// 2021-04-18T02:48:29.919Z
System.out.println(time.toInstant(offset));
转Date
// 先转成 Instant
ZoneOffset zoneOffset = OffsetDateTime.now().getOffset();
Instant instant2 = time.toInstant(zoneOffset);
// 获取毫秒值
long milli = instant2.toEpochMilli();
// 转Date
Date date = new Date(milli);
// Sun Apr 18 11:08:06 CST 2021
System.out.println(date);
// 格式化 Date 输出格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 2021-04-18 11:08:06
System.out.println(simpleDateFormat.format(date));
Date 转 LocalDateTime
// Date 转 LocalDateTime
// Date 先转成 时间
Instant instant3 = new Date().toInstant();
// 根据默认时区转
LocalDateTime dateTime = LocalDateTime.ofInstant(instant3, ZoneId.systemDefault());
// 2021-04-18T22:01:56.723
System.out.println(dateTime);
LocalDate

日期

获取当前日期
// 获取 当前的 日期,没有时间
LocalDate localDate = LocalDate.now();
// 2021-04-18
System.out.println(localDate);
自定义日期
// 自定义日期
LocalDate customLocalDate = LocalDate.of(2021, 10, 1);
// 2021-10-01
System.out.println(customLocalDate);
格式化输出
// 定义格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
// 格式化
String format = dateTimeFormatter.format(localDate);
// 2021年04月18日
System.out.println(format);
解析字符串日期
// 格式 必须与 字符串时间格式一致
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
// 解析字符串
LocalDate parseStrDate = LocalDate.parse("2020年7月10日", dateTimeFormatter);
// 2020-07-10
System.out.println(parseStrDate);
转LocalDateTime
// 转 LocalDateTime
// 需要添加时间 时分秒
LocalDateTime localDateTime = localDate.atTime(LocalTime.now());
// 2021-04-18T21:41:16.195
System.out.println(localDateTime);
转 instant
// 转 Instant
// 根据默认时区 转时刻
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
转Date
// 转 Date
// 先转 LocalDateTime 获取时区
// 在转 Instant
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
// Instant 转 Date
Date date = Date.from(instant);
// 没有时分秒
// Sun Apr 18 00:00:00 CST 2021
System.out.println(date);
Date 转 LocalDate
// Date 转 LocalDate
// 先转成时刻
Instant instant = new Date().toInstant();
// 在根据默认时区 转成 LocalDateTime
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// LocalDateTime 转 LocalDate
LocalDate localDate = dateTime.toLocalDate();
// 2021-04-18
System.out.println(localDate);
LocalTime

时间

获取当前时间
// 获取 当前的 时间,没有日期
LocalTime localTime = LocalTime.now();
// 22:07:55.425
System.out.println(localTime);
自定义时间
// 自定义时间
LocalTime customTime = LocalTime.of(12, 30, 10);
// 12:30:10
System.out.println(customTime);
解析字符串时间
// 解析字符串
LocalTime parse = LocalTime.parse("14点20分30秒", DateTimeFormatter.ofPattern("HH点mm分ss秒"));
// 14:20:30
System.out.println(parse);
格式化输出
// 格式化输出
String format = localTime.format(DateTimeFormatter.ofPattern("HH点mm分ss秒"));
// 22点18分58秒
System.out.println(format);
转 LocalDateTime
LocalDateTime localDateTime = localTime.atDate(LocalDate.now());
// 2021-04-18T22:23:51.692
System.out.println(localDateTime);
转Date
// 转 Date
LocalDateTime dateTime = LocalDateTime.of(LocalDate.now(), localTime);
Instant instant = dateTime.toInstant(OffsetDateTime.now().getOffset());
Date date = Date.from(instant);
// Sun Apr 18 22:30:54 CST 2021
System.out.println(date);
Date 转 LocalTime
// Date 转 LocalTime
Instant instant2 = new Date().toInstant();
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault());
LocalTime localTime2 = localDateTime2.toLocalTime();
// 22:33:26.249
System.out.println(localTime2);
Instant

时刻 时间戳

获取当前时刻
// 获取当前时刻
Instant instant = Instant.now();
// 2021-04-18T14:35:40.372Z
System.out.println(instant);
转 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// 2021-04-18T22:37:06.950
System.out.println(localDateTime);
转Date
Date date = Date.from(instant);
// Sun Apr 18 22:38:27 CST 2021
System.out.println(date);
Date 转 Instant
Instant instant2 = new Date().toInstant();
// 2021-04-18T14:40:01.481Z
System.out.println(instant2);

刚开始写微信公众号,请多多关注,欢迎,多谢!

微信公众号:《Java学习积累》
请关注一下,多谢!!!
微信公众号:Java学习积累

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯共明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值