18个Java8日期处理的实践(太有用了) 完整攻略
本文主要介绍Java8中日期处理的实践,通过多个示例,详细讲解如何使用Java8中的新特性来处理日期。
1. LocalDate
LocalDate是Java8中新增的日期类型,用来表示一个日期,但不包含时间和时区信息。
示例
//创建LocalDate对象
LocalDate date = LocalDate.of(2021, 8, 15);
//获取年份
int year = date.getYear(); //2021
//获取月份
Month month = date.getMonth(); //AUGUST
int monthValue = date.getMonthValue(); //8
//获取日
int dayOfMonth = date.getDayOfMonth(); //15
//获取星期几
DayOfWeek dayOfWeek = date.getDayOfWeek(); //SUNDAY
int dayOfYear = date.getDayOfYear(); //227
//判断是否为闰年
boolean leapYear = date.isLeapYear(); //false
//通过字符串创建LocalDate对象
LocalDate date2 = LocalDate.parse("2021-08-15");
2. LocalTime
LocalTime是Java8中新增的时间类型,用来表示一天中的时间,但不包含日期和时区信息。
示例
//创建LocalTime对象
LocalTime time = LocalTime.of(10, 30);
//获取小时
int hour = time.getHour(); //10
//获取分钟
int minute = time.getMinute(); //30
//获取秒
int second = time.getSecond(); //0
//通过字符串创建LocalTime对象
LocalTime time2 = LocalTime.parse("10:30");
3. LocalDateTime
LocalDateTime是由LocalDate和LocalTime组合而成的日期时间类型,同时包含日期和时间信息。
示例
//创建LocalDateTime对象
LocalDateTime dateTime = LocalDateTime.of(2021, 8, 15, 10, 30);
//获取日期部分
LocalDate date = dateTime.toLocalDate(); //2021-08-15
//获取时间部分
LocalTime time = dateTime.toLocalTime(); //10:30
//通过字符串创建LocalDateTime对象
LocalDateTime dateTime2 = LocalDateTime.parse("2021-08-15T10:30:00");
4. ZonedDateTime
ZonedDateTime是包含时区信息的日期时间类型,可以表示任意时区的日期时间信息。
示例
//创建ZonedDateTime对象
ZonedDateTime zonedDateTime = ZonedDateTime.of(
LocalDateTime.of(2021, 8, 15, 10, 30),
ZoneId.of("America/Los_Angeles")
);
//获取日期时间部分
LocalDateTime dateTime = zonedDateTime.toLocalDateTime(); //2021-08-15T10:30
//获取时区信息
ZoneId zone = zonedDateTime.getZone(); //America/Los_Angeles
5. Instant
Instant是以Unix时间戳的形式表示日期时间的类,它记录的是自1970年1月1日0时0分0秒以来经过的秒数和纳秒数。
示例
//获取当前时间
Instant now = Instant.now();
//获取Unix时间戳
long timestamp = now.getEpochSecond(); //1629042518
//通过Unix时间戳创建Instant对象
Instant instant = Instant.ofEpochSecond(1629042518);
6. Duration
Duration是用来计算两个时间之间的差值的类。
示例
//计算两个时间之间的差值
Duration duration = Duration.between(
LocalDateTime.of(2021, 8, 15, 10, 30),
LocalDateTime.of(2021, 8, 15, 11, 30)
);
//获取差值的总小时数
long hours = duration.toHours(); //1
//获取差值的总分钟数
long minutes = duration.toMinutes(); //60
7. Period
Period是用来计算两个日期之间的差值的类。
示例
//计算两个日期之间的差值
Period period = Period.between(
LocalDate.of(2021, 8, 15),
LocalDate.of(2021, 8, 20)
);
//获取差值的天数
int days = period.getDays(); //5
//获取差值的月数
int months = period.getMonths(); //0
8. DateTimeFormatter
DateTimeFormatter是用来格式化日期时间的类,可以自定义输出格式。
示例
//创建DateTimeFormatter对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//格式化日期时间为字符串
String formatted = LocalDateTime.of(2021, 8, 15, 10, 30).format(formatter); //2021/08/15 10:30:00
//将字符串解析成日期时间
LocalDateTime dateTime = LocalDateTime.parse("2021/08/15 10:30:00", formatter);
9. TemporalAdjusters
TemporalAdjusters是用来获取某个日期时间在指定情况下的调整后的日期时间的类。
示例
//获取下一个周日
LocalDate nextSunday = LocalDate.of(2021, 8, 15).with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); //2021-08-22
//获取下一个工作日(非周六周日)
LocalDate nextWorkDay = LocalDate.of(2021, 8, 15).with(TemporalAdjusters.next(DayOfWeek.MONDAY)); //2021-08-16
10. ChronoUnit
ChronoUnit是用来计算两个日期时间之间差值的类,精度可以到年、月、日、小时、分钟等单位。
示例
//计算两个日期之间的差值
long days = ChronoUnit.DAYS.between(
LocalDate.of(2021, 8, 15),
LocalDate.of(2021, 8, 20)
); //5
//计算两个时间之间的差值
long hours = ChronoUnit.HOURS.between(
LocalTime.of(10, 30),
LocalTime.of(11, 30)
); //1
11. ZoneId
ZoneId是用来表示某一个时区的类。
示例
//获取默认时区
ZoneId zoneId = ZoneId.systemDefault(); //Asia/Shanghai
//获取所有可用的时区
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
//根据时区信息创建ZoneId对象
ZoneId laZone = ZoneId.of("America/Los_Angeles");
12. ZoneOffset
ZoneOffset是用来表示某一个时区距离UTC的偏移量的类。
示例
//获取当前时区距离UTC的偏移量
ZoneOffset offset = ZoneOffset.ofTotalSeconds(ZoneId.systemDefault().getRules().getOffset(Instant.now()).getTotalSeconds()); //+08:00
//将时区偏移量转换为秒数
int totalSeconds = offset.getTotalSeconds(); //28800
13. Clock
Clock是用来获取系统时钟的类,可以方便地获取当前时间和时区信息。
示例
//获取系统时钟
Clock clock = Clock.systemDefaultZone();
//获取当前时间
Instant now = clock.instant();
//获取时区信息
ZoneId zone = clock.getZone(); //Asia/Shanghai
14. Year、Month、DayOfWeek
Year、Month、DayOfWeek分别表示年、月、星期几信息的枚举类。
示例
//获取当前年份
int year = Year.now().getValue();
//获取当前月份
Month month = Month.JANUARY;
//获取当前是星期几
DayOfWeek dayOfWeek = DayOfWeek.MONDAY;
15. Instant和LocalDateTime互转
Instant和LocalDateTime之间可以互相转换。
示例
//将LocalDateTime转换为Instant
Instant instant = LocalDateTime.of(2021, 8, 15, 10, 30).toInstant(ZoneOffset.ofHours(8));
//将Instant转换为LocalDateTime
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneOffset.ofHours(8));
16. LocalDate和LocalDateTime互转
LocalDate和LocalDateTime之间也可以互相转换。
示例
//将LocalDateTime转换为LocalDate
LocalDate date = LocalDateTime.of(2021, 8, 15, 10, 30).toLocalDate();
//将LocalDate转换为LocalDateTime
LocalDateTime dateTime = date.atTime(LocalTime.of(10, 30));
17. LocalDate和Instant互转
LocalDate和Instant之间也可以互相转换。
示例
//将LocalDate转换为Instant
Instant instant = LocalDate.of(2021, 8, 15).atStartOfDay(ZoneOffset.ofHours(8)).toInstant();
//将Instant转换为LocalDate
LocalDate date = LocalDateTime.ofInstant(instant, ZoneOffset.ofHours(8)).toLocalDate();
18. LocalDateTime和ZonedDateTime互转
LocalDateTime和ZonedDateTime之间也可以互相转换。
示例
//将LocalDateTime转换为ZonedDateTime
ZonedDateTime zonedDateTime = LocalDateTime.of(2021, 8, 15, 10, 30).atZone(ZoneId.systemDefault());
//将ZonedDateTime转换为LocalDateTime
LocalDateTime dateTime = zonedDateTime.toLocalDateTime();
以上就是本文的全部内容,Java8中日期时间处理的新特性非常实用,掌握了这些新特性,可以大大提升开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:18个Java8日期处理的实践(太有用了) - Python技术站