java8 日期时间

本文介绍了Java 8中的日期和时间API,包括Instant、LocalDateTime、ZoneId/ZoneOffset、LocalDate/LocalTime、ZonedDateTime的使用,以及DateTimeFormatter格式化、TemporalAdjuster设置修改时间、时间段计算和与Date/Calendar对象转换的方法。Java 8的日期时间API相比旧版更强大且易用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

Java 8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,Java 8引入了一套新的API,位于包java.time下。


一、表示日期和时间

Java 8中表示日期和时间的类有多个,主要的有:
❑ Instant:表示时刻,不直接对应年月日信息,需要通过时区转换;
❑ LocalDateTime:表示与时区无关的日期和时间,不直接对应时刻,需要通过时区转换;
❑ ZoneId/ZoneOffset:表示时区
❑ LocalDate:表示与时区无关的日期,与LocalDateTime相比,只有日期,没有时间信息;
❑ LocalTime:表示与时区无关的时间,与LocalDateTime相比,只有时间,没有日期信息;
❑ ZonedDateTime:表示特定时区的日期和时间。

1. Instant

Instant表示时刻,获取当前时刻,代码为:

Instant now = Instant.now(); // 获取当前时刻
System.out.println(now); // 2024-01-30T07:08:21.837Z
Instant now2 = Instant.ofEpochMilli(System.currentTimeMillis()); // 根据Epoch Time(纪元时)创建Instant
System.out.println(now2); // 2024-01-30T07:08:21.884Z

Date也表示时刻,Instant和Date可以通过纪元时相互转换

Date date = new Date();
Instant instant = Instant.ofEpochMilli(date.getTime()); // 转换Date为Instant
Date date1 = new Date(instant.toEpochMilli()); // 转换Instant为Date

2. LocalDateTime

LocalDateTime表示与时区无关的日期和时间

LocalDateTime ldt = LocalDateTime.now();
LocalDateTime ldt2 = LocalDateTime.of(2017, 7, 11, 20, 45, 5);
int year = ldt2.getYear();//2017
int monthValue = ldt2.getMonthValue();// 7
int dayOfMonth = ldt2.getDayOfMonth();// 11
int hour = ldt2.getHour();// 20
int minute = ldt2.getMinute();// 45
int second = ldt2.getSecond();// 5
Month month = ldt2.getMonth();// JULY
DayOfWeek dayOfWeek = ldt2.getDayOfWeek();// TUESDAY
System.out.println(ldt2);// 2017-07-11T20:45:05

3. ZoneId/ZoneOffset

ZoneOffset是ZoneId的子类,可以根据时区差构造。
LocalDateTime不能直接转为时刻Instant,转换需要一个参数ZoneOffset, ZoneOffset表示相对于格林尼治的时区差,北京是+08:00。

LocalDateTime ldt = LocalDateTime.now();
Instant instant = ldt.toInstant(ZoneOffset.of("+08:00"));
System.out.println(instant); // 2024-01-30T07:42:17.358Z

// ZoneId zone = ZoneId.systemDefault();
ZoneId zone = ZoneId.of("GMT+08:00");//北京时区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值