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中日期时间处理的新特性非常实用,掌握了这些新特性,可以大大提升开发效率。

阅读剩余 84%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:18个Java8日期处理的实践(太有用了) - Python技术站

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

相关文章

  • java string的一些细节剖析

    Java String的一些细节剖析 基本概念 Java中的字符串是由多个字符组成的,可以通过String类进行实现。Java字符串有一些独特的性质,值得我们深入研究。 创建字符串 Java中创建字符串的常用方式有: String str1 = "Hello"; String str2 = new String("World&q…

    Java 2023年6月1日
    00
  • SpringBoot自定义加载yml实现方式,附源码解读

    首先我们需要了解在SpringBoot中如何读取配置文件。SpringBoot 支持的主配置文件类型有两种: .properties 和 .yml 文件格式。在默认情况下,SpringBoot 会优先读取 .properties 文件,如果同时存在两种格式,.yml 文件会覆盖.properties 文件。 然而,有些时候我们需要动态加载一些配置文件,而这些…

    Java 2023年6月15日
    00
  • Spring Security 自定义授权服务器实践记录

    Spring Security 自定义授权服务器实践记录 介绍 Spring Security是一个功能非常强大的安全框架,可以用于处理各种身份认证和授权问题。其中,授权服务器是Spring Security的重要组成部分,用于为客户端颁发访问令牌,同时对请求进行验证和授权。本文将详细介绍如何使用Spring Security自定义授权服务器,并给出两个示例…

    Java 2023年5月20日
    00
  • springboot @Async 注解如何实现方法异步

    SpringBoot提供了@Async注解来实现方法异步,在这个注解的加持下,这些被注解的方法将执行在单独的线程中。这可以减少应用程序的响应时间,提高应用程序的吞吐量。 下面,我们来实现一个简单的示例来说明@Async注解的使用方法。 第一步,导入必须的依赖 在pom.xml文件中,我们需要导入spring-boot-starter-web和spring-b…

    Java 2023年5月26日
    00
  • 用JS动态设置CSS样式常见方法小结(推荐)

    关于用JS动态设置CSS样式的常见方法,可以有以下几种实现方式: 1. 通过 JavaScript 对样式表对象进行操作 可以获取到页面上所有的样式表的对象,通过修改其中的样式信息来实现动态设置 CSS 样式的效果。 var stylesheet = document.styleSheets[0]; // 获取样式表对象,假设是第一条样式表 var rule…

    Java 2023年6月15日
    00
  • spring boot请求异常处理并返回对应的html页面

    当我们在开发Spring Boot应用时,可能会遇到很多请求异常的情况。如何处理这些异常并且返回对应的HTML页面呢?下面我将会为您提供一份完整的攻略。 步骤1:添加依赖 要实现请求异常处理并返回对应的HTML页面,我们需要添加thymeleaf和spring-boot-starter-web两个依赖。 在pom.xml文件中添加以下依赖: <depe…

    Java 2023年5月25日
    00
  • ibatis学习之搭建Java项目

    下面是关于“ibatis学习之搭建Java项目”的完整攻略: 第一步:项目环境搭建 在开始使用ibatis进行Java开发之前,我们首先需要搭建好开发环境,包括: 安装JDK环境:首先需要安装Java Development Kit(JDK),并配置好环境变量。 安装Eclipse IDE:选择一个常用的IDE,如Eclipse IDE,安装并配置好开发环境…

    Java 2023年5月19日
    00
  • Java中GUI工具包AWT和Swing用法介绍

    Java中GUI工具包AWT和Swing用法介绍 Java是一种编程语言,它具有丰富的GUI(图形用户界面)编程功能。Java中提供了两个常用的GUI工具包:AWT(注意大小写)和Swing,它们提供了大量的组件和技术,用于创建富有吸引力和交互性的应用程序。 AWT AWT中的组件直接调用操作系统的本地GUI组件,因此,当用户界面更改时,AWT组件将自动更新…

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