深入了解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);//输出结果:1
    dayOfWeek = DayOfWeek.MONDAY;
    String dayName = dayOfWeek.toString(); // 获取日期名称(如MONDAY、TUESDAY等)
    System.out.println(dayName);//输出结果:MONDAY
    DayOfWeek dayOfWeekFromNumber = DayOfWeek.of(1); // 通过数字值创建DayOfWeek对象
    System.out.println(dayOfWeekFromNumber);//输出结果:MONDAY
}

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MuJoCo机器人动力学仿真平台安装与教程

MuJoCo是一个机器人动力学仿真平台,它包括一系列的物理引擎、可视化工具和机器人模拟器等工具,用于研究和模拟机器人的运动和动力学特性。以下是MuJoCo的安装教程: 下载和安装MuJoCo Pro。可以从MuJoCo的官方网站上下载最新版本的安装包。根…

VUE学习一、环境的安装

1.node.js安装 node.js是前端依赖的环境, 类似于java中的jdk 下载地址 node.js 下载 msi文件 下完就是一顿嘎嘎安装 , 安装后可以cmd看看node和npm的版本 1.2 yarn的安装 Yarn是Facebook最近发布的一款依赖包安装工具。Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管…

POJ 3735 Training little cats 动态规划(矩阵的幂)

一、题目大意 我们有N只猫&#xff0c;每次循环进行K次操作&#xff08;N<100&#xff0c;K<100&#xff09;&#xff0c;每次操作可有以下三种选择&#xff1a; 1、g i 给第i只猫1个食物 2、e i 让第i只猫吃完它所有的食物 3、s i j 交换第i和j只猫的食物。 求出M次…

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组(样卷)

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组&#xff08;样卷&#xff09; 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 …

104. 二叉树的最大深度(Java)

目录 解法&#xff1a; 官方解答&#xff1a; 方法一&#xff1a;深度优先搜索 方法二&#xff1a;广度优先搜索 思路与算法 复杂度分析 时间复杂度&#xff1a; 空间复杂度&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根…

N卡、A卡能合体了,双卡“交火”游戏帧率暴涨200%

如果你混迹 PC 圈有些年头&#xff0c;一定听说过显卡「交火」这个直觉上很猛的操作。 双卡、三卡、四卡…有几张就「叠加」几倍的效果可比单张升级更让人兴奋。 然而&#xff0c;不管是 NVIDIA SLI 还是 AMD CrossFire 这几年都在了大众视野消失了。 原因很简单&#xff0c;…

611.有效的三角形个数

1.题目解析 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 补充&#xff1a; 1.三角形的判断&#xff1a;假设有三条边按大小排序&#xff1a; 2.题目示例 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用…

os.walk()遍历文件夹/文件

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

xcode ——Instrumets(网络连接调试)使用

环境&#xff1a; instruments 使用只能在真机调试时使用&#xff0c;且真机系统必须ios15 点击debug 按钮——Network——Profile in Instruments 然后就可以看到如下面板 展开运行的项目&#xff0c;点击session下的域名&#xff0c;下方回出现该域名下的网络请求。点击Deve…

使用 GROUP BY 进行数据库分析:以图书销售数据库为例

让我们通过一个简单但实用的例子来理解 GROUP BY 的使用。我们将以一个图书销售数据库为例。这个数据库包含两张表&#xff1a;一张是图书信息表 (books)&#xff0c;另一张是销售记录表 (sales)。我们会先创建这两张表&#xff0c;然后插入一些数据&#xff0c;并展示如何使用…

算法:常见的哈希表算法

文章目录 两数之和判断是否互为字符重排存在重复元素存在重复元素字母异位词分组 本文总结的是关于哈希表常见的算法 哈希表其实就是一个存储数据的容器&#xff0c;所以其实它本身的算法难度并不高&#xff0c;只是利用哈希表可以对于一些场景进行优化 两数之和 class Solut…

openEuler学习05-ssh升级到openssh-9.5p1

openEuler的版本是openEuler 20.03&#xff0c;ssh的版本是OpenSSH_8.2p1 [roottest ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-…

单例模式---饿汉式、懒汉式

一、什么是单例模式 单例模式&#xff0c;指的是一个类中的对象只能有一个&#xff0c;它在内存中只会创建一次对象的设计模式。 二、饿汉式 public class SingleTon {// 私有的构造方法private SingleTon() {};// 1. 饿汉式private static SingleTon instance new SingleTon…

UE Websocket笔记

参考链接 [UE4 C入门到进阶]12.Websocket网络通信 - 哔哩哔哩 包含怎么用Nodejs 写测试服务器 UE4_使用WebSocket和Json&#xff08;上&#xff09; - 知乎 包含Python写测试服务器 UE4_使用WebSocket和Json&#xff08;下&#xff09; - 知乎 示例代码 xxx.Build.cs"W…

思伟老友记 | 晋江市尚亿建材实业有限公司携手思伟软件16年

晋江市尚亿建材实业有限公司 晋江市尚亿建材实业有限公司成立于2006年&#xff0c;建有两个混凝土搅拌站&#xff0c;是晋江市成立时间最长的搅拌站之一。目前拥有25部搅拌车&#xff0c;5部泵送车&#xff0c;3部装载机&#xff0c;混凝土年产量超过50万m。 思伟软件与尚亿公…

土壤水分测量仪QY-800S多层一体化监测土壤墒情

产品概述&#xff1a; 土壤水分测量仪又名非接触式土壤水分测量仪、土壤墒情测量仪&#xff0c;是一款以介电常数检测原理为基础的传感器。能够针对不同土层的土壤水分含量进行动态观测&#xff0c;而且是进行快速、准确、全面地观测&#xff0c;让人们实现对土壤的高度感知。 …

freeswitch编译mod_av支持webrtc MCU通话

系统环境 一、FS相关网站 二、第三方库安装 1.apt安装 2.指定版本sofia-sip安装 3.指定版本spandsp安装 4.指定版本libks安装 5.指定版本openssl安装 三、指定版本FS安装 1.CPPFLAGS配置 2.编译器版本 3.FS配置编译 四、FS&#xff0c;fs_cli运行&#xff0c;模块加载 附录 1.安…

软考2018下午第六题改编逻辑(状态模式)

在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象 package org.example.状态模式.软考航空;/*** author lst* date 2023年12月07日 15:37*/ class FrequentFlyer {CState state;double flyMiles;public FrequentFlyer() {…

官方版小白重装系统之制作装机U盘篇

一、前言 很多人会安装电脑的操作系统&#xff0c;也有很多人不会安装&#xff0c;甚至还要花时间花金钱找人安装。 网上重装系统的网站很多&#xff0c;安装系统的工具软件也很多&#xff0c;其中不乏捆绑有病毒木马、广告间谍的&#xff0c;很多人深受其害&#xff0c;那为什…

Navicat Premium 16 for Mac/Windows:高效的数据库开发工具

Navicat Premium 16是一款功能强大的数据库开发工具&#xff0c;为开发人员提供了全面的工具和功能&#xff0c;帮助他们更高效地进行数据库开发和管理。不论是初学者还是专业开发人员&#xff0c;Navicat Premium 16都能满足他们的需求&#xff0c;并提供直观、易用的界面。 …