18个Java8日期处理的实践(太有用了)

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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JavaScript反射与依赖注入实例详解

    JavaScript 反射与依赖注入实例详解 JavaScript 反射和依赖注入是现代 web 应用程序发展中的两个重要的技术,本文将深入讨论这两个概念,并提供一些具体的实例和攻略。 什么是 JavaScript 反射? JavaScript 反射是一种技术,它可以在运行时检查一个对象的属性和方法,并对其进行操作。这通常用于创建更动态和灵活的应用程序。 如…

    Java 2023年5月26日
    00
  • Java 实战范例之员工管理系统的实现

    Java 实战范例之员工管理系统的实现攻略 1. 系统需求分析 1.1. 员工信息管理模块 根据需求分析,该员工管理系统需要提供对员工信息的增、删、改、查、排序等操作,并能够将员工信息保存在文件中。 1.2. 打印报表模块 该系统还需要提供打印报表的功能,可以根据不同的条件查询员工信息并打印报表。 2. 系统设计 2.1. 类的设计 需要设计Employee…

    Java 2023年5月19日
    00
  • hadoop 全面解读自定义分区

    Hadoop 全面解读自定义分区 什么是分区 在 Hadoop 中,分区是指在将数据写入到 HDFS 中时,对数据进行分类以便于管理。在每个分区中,都包含了一部分数据,每个分区都有一个固定的编号。 默认分区 当我们使用 Hadoop 内置的 MR 程序时,所有的数据都将会按照默认的哈希分区规则进行分区。一般情况下,分区的数量是由系统自动计算的。 自定义分区 …

    Java 2023年5月20日
    00
  • Mybatis如何使用动态语句实现批量删除(delete结合foreach)

    下面是Mybatis如何使用动态语句实现批量删除(delete结合foreach)的完整攻略。 前置知识 在了解如何使用动态语句实现批量删除之前,需要先掌握以下知识: Mybatis的基本操作 SqlSession对象 Mapper.xml配置文件 foreach标签的用法 1. 参数准备 我们假设有一个表user,里面存储了许多用户信息。我们需要批量删除其…

    Java 2023年5月20日
    00
  • JDK1.7 Paths,Files类实现文件夹的复制与删除的实例

    首先,我们需要了解一下JDK1.7引入的Paths和Files类,它们提供了更加方便的文件和路径操作方法。 1. 复制文件夹 示例1 让我们看一下如何使用Paths和Files类来实现复制整个文件夹的功能。 import java.io.IOException; import java.nio.file.Files; import java.nio.file…

    Java 2023年5月19日
    00
  • spring 和 spring boot 中的属性配置方式

    Spring和Spring Boot中的属性配置方式 Spring和Spring Boot都提供了多种属性配置方式,本文将详细介绍这些方式,并提供两个示例。 Spring中的属性配置方式 Spring中的属性配置方式有以下几种: 1. 使用XML配置文件 使用XML配置文件是Spring最早的属性配置方式。在XML配置文件中,我们可以使用元素来定义Bean,…

    Java 2023年5月15日
    00
  • Java编程之文件读写实例详解

    《Java编程之文件读写实例详解》的攻略如下: 第一步:导入IO库 首先要在Java代码中导入IO库,这个库包括文件读写所需的各种类。 import java.io.*; 第二步:读取文件 使用BufferedReader类读取文本文件,具体方法如下: try{ BufferedReader reader = new BufferedReader(new F…

    Java 2023年5月20日
    00
  • 迅速学会@ConfigurationProperties的使用操作

    下面我将为您详细讲解“迅速学会@ConfigurationProperties的使用操作”的完整攻略。 什么是@ConfigurationProperties @ConfigurationProperties是Spring Boot提供的一种读取properties配置文件的注解。通过在类上添加此注解,可以将属性值自动绑定到该类的对应字段上,并且可以对属性值…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部