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日

相关文章

  • ShardingSphere数据库读写分离算法及测试示例详解

    下面我将为大家详细讲解“ShardingSphere数据库读写分离算法及测试示例详解”的完整攻略。 1. ShardingSphere数据库读写分离算法简介 ShardingSphere是一款开源的分布式数据库中间件,其中提供了数据库读写分离功能。读写分离是指将数据库的读写操作分别分发到不同的节点进行,以达到平衡负载、提高数据库性能和可用性的目的。在Shar…

    Java 2023年5月20日
    00
  • 如何使用Java字节码插装工具?

    下面是使用Java字节码插装工具的完整攻略: 什么是Java字节码插装工具? Java字节码插装工具是一种工具,它能够在Java字节码层面上,对Java应用程序进行修改和增强,以实现一些原本不可能做到的功能,比如动态改变方法返回值、修改方法的行为、做AOP等。Java字节码插装工具常用的有ASM、Javassist、ByteBuddy等。 安装和配置Java…

    Java 2023年5月11日
    00
  • java中String与StringBuilder的区别

    请允许我详细讲解“java中String与StringBuilder的区别”。 1. String与StringBuilder的定义 String类是Java内置的一个不可变的字符串类。每当我们对一个字符串进行操作的时候,都会创建一个新的字符串对象,这会导致很多的垃圾内存产生。而StringBuilder类是Java内置的可变字符串类,它可以进行多次修改而不…

    Java 2023年5月27日
    00
  • Java内省实例解析

    Java内省实例解析 什么是Java内省? Java内省是指通过类提供的公共方法来访问类属性和方法的一种机制,用于实现Java Bean自省功能。 如何使用Java内省? Java内省通过Java自带的Introspector类实现。Introspector类提供了丰富的API,用于获取和操作Java Bean中的属性、方法等。 获取Java Bean信息 …

    Java 2023年6月15日
    00
  • JS立即执行的匿名函数用法分析

    JS立即执行的匿名函数用法是前端开发中常用的技巧之一,它可以避免全局变量的污染和冲突,同时也可以保护代码的隐私性和可维护性。本文将对这种用法进行详细的分析和解释,并且提供2个示例以便读者更好地理解。 1. 立即执行函数的基本概念和语法 立即执行函数是指在定义后立即执行的一种函数,它没有名称,也无法被重复调用,一般用于创建作用域并避免变量污染。它的基本语法形式…

    Java 2023年5月26日
    00
  • Java 和 JavaScript 真正通用的Base64编码详解

    Java 和 JavaScript 真正通用的Base64编码详解 什么是Base64编码? Base64 编码是一种通过将二进制数据转换成 ASCII 字符串的编码方式,常用于在文本协议中传输二进制数据。基本原理是将连续的3个字节数据分成4组,然后将每组数据转换成4个字符,采用“=”进行填充。 Java中的Base64编码 在 Java 中,使用 java…

    Java 2023年5月20日
    00
  • SpringBoot yaml语法与JRS303校验超详细讲解

    下面是关于SpringBoot yaml语法与JRS303校验的完整攻略: 什么是SpringBoot yaml语法 yaml 是一种面向人类的通用数据序列化格式,被广泛地应用于各类编程语言中。在SpringBoot中,yaml语法被用来配置应用程序的属性,更具有可读性、易用性和可维护性。 下面是一个简单示例: server: port: 8080 spri…

    Java 2023年6月2日
    00
  • JSP动态网页开发原理详解

    JSP即Java Server Pages,是一种基于Java语言的服务器端动态网页开发技术。使用 JSP 可以轻松开发动态网页,并且对于前端开发人员来说,JSP 的语法也比较友好,易于理解和掌握。下面将从几个方面详细讲解JSP的开发原理。 JSP原理 JSP的原理是将HTML页面和Java代码交织在一起,JSP页面中可以使用HTML标记,在其中使用Java…

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