深入了解Java 8日期时间新玩法之Year、YearMonth、MonthDay、DayOfWeek

 

推荐语

在这篇文章中,我们将深入探讨Java 8中Year、YearMonth、MonthDay和DayOfWeek类的功能和使用方法。这些类是在Java 8中引入的新的日期时间API的一部分,它们为我们提供了更灵活、更易用的日期和时间处理能力。

尽管这些类在Java 8中已经出现,但是对许多开发人员来说,它们可能仍然相对陌生。因此,本文旨在帮助读者更好地理解这些类的基本概念、核心方法和实际应用场景。虽然本文是一些相对较基础的内容,但我们希望通过分享这些知识,能够激发您对Java日期时间处理的兴趣和热情。

如果您对Java日期时间处理有更深入的需求或问题,我们鼓励您在评论区留言,让我们一起探讨和学习。当然,如果方便话,麻烦小伙伴能够把免费的点赞、收藏,走上一波!创作不易,感谢支持!

注意

本文编写的单元测试是基于java11,具体的版本号是:11.0.19

Year

Java 8中,Year类是一个不可变、线程安全的类,用于表示和操作年份。它主要用于处理与年份相关的日期和时间操作,例如获取当前年份、创建指定年份的Date对象等。

核心方法:

  • now():该方法返回表示当前日期的Year对象。该方法使用系统默认的时区来获取当前年份。
  • now(Clock clock):该方法返回表示指定时间戳的Year对象。该方法使用指定的Clock对象来获取当前年份。
  • of(int year):该方法用于创建一个表示指定年份的Year对象。如果输入的年份参数不在范围内(公元1年-公元9999年),则会抛出IllegalArgumentException异常。
@Test
public void test3() {// 使用now()方法获取当前年份Year year = Year.now();int currentYear = year.getValue(); // 获取年份的值System.out.println("当前年份:" + currentYear);// 使用now(Clock clock)方法获取指定时间戳的年份Clock clock = Clock.systemDefaultZone();Year yearFromClock = Year.now(clock);int yearFromClockValue = yearFromClock.getValue(); // 获取年份的值System.out.println("指定时间戳的年份:" + yearFromClockValue);// 使用of()方法创建指定年份的Year对象Year customYear = Year.of(2023);int customYearValue = customYear.getValue(); // 获取年份的值System.out.println("自定义年份:" + customYearValue);
}

YearMonth

YearMonth类代表一个特定的年和月,可以表示任何合法的年和月组合,例如2020-02。它主要用于处理与年和月相关的日期和时间操作。

核心方法:

  • now():获取当前年份和月份。例如,YearMonth.now()将返回当前的年和月。
  • of(int year, int month):创建一个表示特定年和月的YearMonth对象。例如,YearMonth.of(2020, 2)将创建一个表示2020年2月的YearMonth对象。
  • lengthOfMonth():返回当前YearMonth实例有多少天。例如,YearMonth.of(2020, 2).lengthOfMonth()将返回29,因为2020年是闰年,2月有29天。
@Test
public void test3() {// 获取当前年和月YearMonth currentYearMonth = YearMonth.now();System.out.printf("这个月的年月 %s 有 %d 天 %n", currentYearMonth, currentYearMonth.lengthOfMonth());// 创建一个表示特定年和月的YearMonth对象YearMonth creditCardExpiry = YearMonth.of(2018, Month.JULY);System.out.printf("你输入的年月是 %s %n", creditCardExpiry);
}

这个示例中,YearMonth.now()方法获取了当前的年和月,并使用lengthOfMonth()方法获取了当前年月的天数。另外,YearMonth.of(2018, Month.JULY)方法创建了一个表示2018年7月的YearMonth对象,并输出了该对象。

MonthDay

在Java 8中,MonthDay是一个非常实用的类,它用于处理只有月和日的信息,而没有年和其他时间信息的情况。这可以用于处理生日、纪念日和星座等周期性问题。

核心方法:

of(int month, int day): 创建一个表示特定月日的MonthDay对象。

from(LocalDate): 从给定的LocalDate对象中提取月和日的信息,创建一个新的MonthDay对象。

equals(Object): 比较两个MonthDay对象是否相等。

这些方法的具体使用示例如下:

@Test
public void test3() {// 创建一个表示7月18日的MonthDay对象MonthDay monthDay = MonthDay.of(7, 18);// 从当前日期创建一个MonthDay对象LocalDate localDate = LocalDate.now();MonthDay day = MonthDay.from(localDate);// 检查两个MonthDay对象是否相等if (monthDay.equals(day)) {System.out.println("Many Many happy returns of the day !!");} else {System.out.println("Sorry, today is not your birthday");}
}

此外,你还可以使用MonthDay对象来计算两个日期之间相差的天数、月数或年数。例如,要计算两个给定的日期之间包含多少天,多少周或者多少年,可以使用ChronoUnit.DAYS.between(),ChronoUnit.WEEKS.between(),ChronoUnit.YEARS.between()等方法。

DayOfWeek

Java 8中的DayOfWeek是一个不可变的、线程安全的枚举,表示一周中的一天,如MONDAY、TUESDAY等,适用于需要表示一周中某一天的场景。除了日期名称,DayOfWeek也有一个数字值。可以使用数字值来获取日期名称,也可以通过日期名称来获取数字值。

核心方法:

  • getValue():获取数字值(1-7)。
  • toString():获取日期名称(如MONDAY、TUESDAY等)。
  • of():通过数字值创建DayOfWeek对象。
@Test
public void test3() {DayOfWeek dayOfWeek = DayOfWeek.MONDAY;int dayNumber = dayOfWeek.getValue(); // 获取数字值(1-7)System.out.println(dayNumber);//输出结果:1dayOfWeek = DayOfWeek.MONDAY;String dayName = dayOfWeek.toString(); // 获取日期名称(如MONDAY、TUESDAY等)System.out.println(dayName);//输出结果:MONDAYDayOfWeek dayOfWeekFromNumber = DayOfWeek.of(1); // 通过数字值创建DayOfWeek对象System.out.println(dayOfWeekFromNumber);//输出结果:MONDAY
}

总结

Year、YearMonth、MonthDay、DayOfWeek是Java 8中新增的日期时间API的一部分,它们提供了更灵活和强大的日期和时间处理能力。这些类都是不可变的,意味着一旦创建了对象,其值就不能更改。这种设计使得对这些对象的并发操作更加安全和高效。同时,这些类都实现了Comparable接口,可以根据时间顺序进行比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/258083.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境电商系统搭建 无货源系统对接API 反向代购系统

跨境电商系统是为国外的客户代购中国商品的系统,系统实现与国内电商API对接,客户可直接在系统中搜索国内电商平台的商品。查看演示网站 一级功能二级功能 标准版 高级版 企业版 企业旗舰版 大客户尊享版 标准版高级版企业版企业旗舰版大客户尊享版 前台主…

泽攸科技二维材料转移台的应用场景及优势

随着二维材料的广泛研究和各种潜在应用的开发,对于二维材料样品的精密操控与转移的需求日益增加。特别是一些新型二维材料的制备和器件集成制备中,需要在显微镜下对样品进行观察与定位,并能够在微米甚至纳米量级上精确移動和转移样品。 传统…

溯源取证-WEB流量分析-简单

话不多说直接干: 题干: 开发团队在公司的一个 Web 服务器上发现了异常文件,开发团队怀疑该服务器上存在潜在的恶意活动,网络团队准备了一个包含关键网络流量的 pcap 文件,供安全团队分析,而你的任务是分析…

数学建模-二氧化碳排放及时空分布测度

二氧化碳排放及时空分布测度 整体求解过程概述(摘要) 面临全球气候变化的巨大挑战,我国积极响应《巴黎协定》的号召,提出“2030年前碳达峰,2060 年前实现碳中和”的碳排放发展目标,并将碳中和相关工作作为 2021 年的重点任务之一…

Selenium自动化测试总结

一、Selenium自动化测试(基于python) 1、Selenium简介: 1.1 Selenium是一款主要用于Web应用程序自动化测试的工具集合。Selenium测试直接运行在浏览器中,本质是通过驱动浏览器,模拟浏览器的操作,比如跳转、…

浪潮信息KeyarchOS——保卫数字未来的安全防御利器

浪潮信息KeyarchOS——保卫数字未来的安全防御利器 前言 众所周知,目前流行的操作系统有10余种,每一款操作系统都有自己的特点。作为使用者,我们该如何选择操作系统。如果你偏重操作系统的安全可信和稳定高效,我推荐你使用浪潮信…

[网鼎杯 2020 朱雀组]phpweb1

提示 call_user_func()函数先通过php内置函数来进行代码审计绕过system(##不止一种方法) 拿到题目养成一个好的习惯先抓个包 从抓到的包以及它首页的报错来看,这里死活会post传输两个参数func以及p func传输函数,而p则是传输参数的…

Cloak斗篷技术不知道?超实用干货,FP商家必读!

都2023年了,还有很多人犹豫要不要入局独立站。心动不如行动,如果想要在跨境独立站中干出一番新事业,要赶紧动起来。部分卖家在出海初期,都想着出售FP产品,涉及到FP产品,各大主流平台上都有严格的审核机制&a…

外贸行业的CRM系统和其它CRM有什么区别?

外贸行业对客户管理的追求日益提高,为了应对客户需求的变化和多元性,外贸企业需要借助CRM管理系统实现智能管理。下面,我们将详细探讨外贸CRM的概念、特点和具体应用。 什么是外贸CRM? 外贸CRM是指针对外贸行业的客户关系管理系…

菜鸟学习日记(python)——推导式

python中的推导式是一种独特的数据处理方式,可以从一个数据序列去构建另一个新的数据序列的结构体。 它包括以下推导式: 列表(list)推导式字典(dict)推导式集合(set)推导式元组&am…

基于JAVA+SpringBoot+Vue的前后端分离的旅游网站

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 近年来,随…

一文详解Java反射

文章目录 反射是什么?反射的作用所有方法汇总一、加载Class对象二、加载类的构造器对象三、加载类的成员变量四、加载类的成员方法 反射是什么? 反射就是:加载类,并允许以编程的方式解剖类中的某个成分(成员变量&#…