Java8 LocalDate LocalTime LocalDateTime的使用

// 用法一:获取当前日期
// 1.获取当前日期
// LocalDate.now().minusDays(1);  // 正数时 减n天   负数时,加 n 天 等同于函数 plusDays
//LocalDate.now().plusDays(1);    // 正数时 加n天   负数时,减 n 天 等同于函数 minusDays
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
//localDate:2025-03-24     localTime:11:38:09.077     localDateTime:2025-03-24T11:38:09.077
log.info("localDate:{}, localTime:{}, localDateTime:{}", localDate, localDateTime, localDateTime);
// 2.获取 年、月、天
Month month = LocalDate.now().getMonth();
int value2Month = month.getValue();
int monthValue = LocalDate.now().getMonthValue();
// month:MARCH, month to value: 3, monthValue: 3
log.info("month:{}, month to value: {}, monthValue: {}", month, value2Month, monthValue);
int num1 = 999_999_999;
int num2 = 999999999;
// num1:999999999, num1 == num2: true
log.info("num1:{}, num1 == num2: {}", num1, (num1 == num2));
int day2Month = LocalDate.now().getDayOfMonth();
int day2Year = LocalDate.now().getDayOfYear();
Month month2 = LocalDate.now().getMonth();
int year = LocalDate.now().getYear();
log.info("day: {},day2Year: {}, month: {}, year: {}", day2Month, day2Year, month2, year);
// 3.获取详细信息 获取星期几   获取日期在年份中的第几天   获取日期所在月份的天数  获取日期所在年份的天数   检查日期所在年份是否为闰年
/*** 获取星期几枚举值* 检查日期所在年份是否为闰年* 检查日期所在年份是否为闰年*/
LocalDate currentDate = LocalDate.now();
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
int daysofWeekValue = currentDate.getDayOfWeek().getValue();
int dayOfYear = currentDate.getDayOfYear();
boolean isLeapYear = currentDate.isLeapYear();
int daysInMonth = currentDate.lengthOfMonth();
int daysInYear = currentDate.lengthOfYear();log.info("当前日期: {}", currentDate);             //当前日期: 2025-03-25
log.info("今天是星期几: {}, 是这一星期的第几天: {}", dayOfWeek, daysofWeekValue); //今天是星期几: TUESDAY, 是这一星期的第几天: 2
log.info("日期在年份中的第几天: {}", dayOfYear);    //日期在年份中的第几天: 84
log.info("是否为闰年: {}", isLeapYear);           //是否为闰年: false
log.info("当前月份的天数: {}", daysInMonth);      //当前月份的天数: 31
log.info("当前年份的天数: {}", daysInYear);       // 当前年份的天数: 365// 用法二:创建特定的日期 使用  LocalDate.of(year, month, day)
// 格式标准的String对象转化为LocalData对象 LocalDate.parse用于将字符串表示的日期解析为 LocalDate 对象
LocalDate someDate = LocalDate.of(2023,10,22);
log.info("当前日期为:{}", someDate);//当前日期为:2023-10-22//创建一个字符串日期  格式化日期规则
String stringdata="2023-01-06";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//将字符串日期按照规则转化为LocalData对象
LocalDate str2localDate= LocalDate.parse(stringdata,formatter);
log.info("当前日期为: {}", str2localDate);//当前日期为:2023-01-06// 原始日期字符串 yyyy-M-d 使用 DateTimeFormatter 格式化日期,指定月份和日期部分的宽度为两位 yyyy-MM-dd
String originalDate = "2023-1-1";
LocalDate date = LocalDate.parse(originalDate, DateTimeFormatter.ofPattern("yyyy-M-d"));
String localDate2Str = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
log.info("格式化前的日期:{}, 格式化后的日期:{}", originalDate, localDate2Str);// 格式化前的日期:2023-1-1, 格式化后的日期:2023-01-01// 用法三:LocalDate的日期运算
// 1.增加或减少指定年数。 plusYears(long years), minusYears(long years)
// 2.增加或减少指定月数 plusMonths(long months), minusMonths(long months)
// 3.增加或减少指定周数 plusWeeks(long weeks), minusWeeks(long weeks)
// 4.增加或减少指定天数 plusDays(long days), minusDays(long days)
// 5.统一的操作 除了对年月周日单独操作外,我们还可以进行统一的操作,比如增加一年零三个月(plus为增,minus为减)
currentDate = LocalDate.now();
LocalDate futureDate = currentDate.plusYears(2); // 增加2年
LocalDate pastDate = currentDate.minusYears(1); // 减少1年
log.info("增加后的年数: {}, 减少后的年数: {}", futureDate, pastDate);   // 增加后的年数: 2027-03-25, 减少后的年数: 2024-03-25currentDate = LocalDate.of(2025,3,31);;
futureDate = currentDate.plus(Period.of(1, 2, 0));          // 增加1年2个月
log.info("当前日期: {}, 增加后的日期: {}", currentDate, futureDate);       //当前日期: 2025-03-25, 增加后的日期: 2026-05-25LocalDate anyDate = LocalDate.of(2025,3,31);            // 当前时间 2025-03-31
futureDate = currentDate.plus(Period.of(0, 1, 0));          // 月底的最后一天,增加1个月, 到下个月的月底的最后一天
log.info("当前日期: {}, 增加后的日期: {}", anyDate, futureDate);       //当前日期: 2025-03-31, 增加后的日期: 2025-04-30
futureDate = currentDate.minus(Period.of(0, 1, 0));          // 月底的最后一天, 减少1个月, 到上个月的月底的最后一天
log.info("当前日期: {}, 增加后的日期: {}", anyDate, futureDate);       //当前日期: 2025-03-31, 增加后的日期: 2025-02-28// 用法四:获取特定时间
// 获取当前时间所在周,月等信息的特定时间
// 1.获取当前时间所在周的第一天以及最后一天:
// 2.获取当前时间所在月的第一天以及最后一天:
// 3.获取当前时间所在周是本年以及本月第几周
currentDate = LocalDate.now();
// 获取当前周的第一天(星期一) 获取当前周的最后一天(星期日)
LocalDate firstDayOfWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
LocalDate lastDayOfWeek = currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
log.info("本周第一天: {}, 本周最后一天: {}", firstDayOfWeek, lastDayOfWeek); //本周第一天: 2023-10-09// 获取当前月的最后一天
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
log.info("本月第一天: {}, 本月最后一天: {}", firstDayOfMonth, lastDayOfMonth); //本月第一天: 2023-10-01// 获取当前日期所在周是本月的第几周, minimalDaysInFirstWeek  是一周的第几天  如 今天2025-03-25 是周二  那么周3就是本周的第四周,周一、周二就是本周的第五周
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,3);
int weekOfMonth = currentDate.get(weekFields.weekOfMonth());
// 获取当前日期所在周是本年的第几周
int weekOfYear = currentDate.get(weekFields.weekOfWeekBasedYear());
log.info("当前日期所在周是本月的第 {} 周, 当前日期所在周是本年的第 {} 周", weekOfMonth, weekOfYear);
// TemporalAdjusters 是 Java 8 中的一个实用工具类  它提供了一些内置的、用于日期时间调整的工具方法。这些方法允许你进行复杂的日期时间调整操作,
// 如获取某月的第一天、获取下一个星期一、获取年底最后一天等。TemporalAdjusters 中的方法返回 TemporalAdjuster 对象,这是一个函数式接口,
// 用于在 java.time 框架中进行日期时间的调整。以下是一些常见的 TemporalAdjusters 方法及其功能
//lastDayOfMonth():返回指定日期所在月份的最后一天。
//firstDayOfNextMonth():返回指定日期下个月的第一天。
//firstDayOfNextYear():返回指定日期下一年的第一天。
//next(DayOfWeek dayOfWeek):返回指定日期之后的下一个星期几。例如,next(DayOfWeek.MONDAY) 返回下一个星期一。
//previous(DayOfWeek dayOfWeek):返回指定日期之前的上一个星期几。
//nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回下一个指定星期几。
//previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回上一个指定星期几。
//firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一个指定星期几。
//lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一个指定星期几。
//dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第 ordinal 个指定星期几。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY) 返回指定日期所在月份的第二个星期三。
//firstDayOfYear():返回指定日期所在年份的第一天。
//lastDayOfYear():返回指定日期所在年份的最后一天。// 用法五:日期的比较
// 1. equals() 方法 用于检查两个 LocalDate 对象是否表示相同的日期。如果两个对象表示相同的日期,equals() 方法将返回 true,否则返回 false。
LocalDate date1 = LocalDate.of(2023, 5, 15);
LocalDate date2 = LocalDate.of(2023, 5, 15);
LocalDate date3 = LocalDate.of(2023, 5, 16);
boolean areEqual  = date1.equals(date2); // 返回 true
boolean areEqual2 = date1.equals(date3); // 返回 false
log.info("2023-05-15 与 2023-05-15 equal 比较: {}, 2023-05-15 与 2023-05-16 equal 比较: {}", areEqual, areEqual2);
// 2.isBefore() 方法 用于检查一个 LocalDate 是否在另一个 LocalDate 之前。如果第一个日期在第二个日期之前,该方法返回 true,否则返回 false。
date1 = LocalDate.of(2023, 5, 15);
date2 = LocalDate.of(2023, 5, 20);
boolean isBefore  = date1.isBefore(date2); // 返回 true
boolean isBefore2 = date2.isBefore(date1); // 返回 false
log.info("2023-05-15 与 2023-05-20 isBefore 比较: {}, 2023-05-20 与 2023-05-15 isBefore 比较: {}", isBefore, isBefore2);
// 3.isAfter() 方法 用于检查一个 LocalDate 是否在另一个 LocalDate 之后。如果第一个日期在第二个日期之后,该方法返回 true,否则返回 false。date1 = LocalDate.of(2023, 5, 15);
date2 = LocalDate.of(2023, 5, 10);
boolean isAfter = date1.isAfter(date2);  // 返回 true
boolean isAfter2 = date2.isAfter(date1); // 返回 false
log.info("2023-05-15 与 2023-05-10 isAfter 比较: {}, 2023-05-10 与 2023-05-15 isAfter 比较: {}", isAfter, isAfter2);// 4.compareTo() 方法 用于将两个 LocalDate 对象进行比较,并返回一个整数值。如果第一个日期在第二个日期之前,返回负数;
// 如果两个日期相同,返回零;如果第一个日期在第二个日期之后,返回正数。date1 = LocalDate.of(2023, 5, 15);
date2 = LocalDate.of(2023, 5, 20);
int result = date1.compareTo(date2); // 返回-5
int result2 = date2.compareTo(date1); // 返回5
log.info("2023-05-15 与 2023-05-20 compareTo 比较: {}, 2023-05-20 与 2023-05-15 compareTo 比较: {}", result, result2);

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

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

相关文章

全面讲解python的uiautomation包

在常规的模拟鼠标和键盘操作,我们一般使用pyautogui,uiautomation模块不仅能直接支持这些操作,还能通过控件定位方式直接定位到目标控件的位置,而不需要自己去获取对应坐标位置。uiautomation模块不仅支持任意坐标位置截图&#x…

图解CNN、RNN、LSTM

一、CNN 二、RNN 三、LSTM 以上笔记参考自b站up主 自然卷小蛮(自然卷小蛮的个人空间-自然卷小蛮个人主页-哔哩哔哩视频),感兴趣的可以去深入了解。

3.25学习总结 抽象类和抽象方法+接口+内部类+API

抽象类和抽象方法: 有抽象方法,那么类肯定是抽象类。父类不一定是抽象的,但如果父类中有抽象方法那一定是抽象类。 如果子类中都存在吃这个行为,但吃的具体东西不同,那么吃这个行为定义在父类里面就是抽象方法&#x…

Ubuntu22.04 UEFI系统配置Apache Tomcat/8.5.87为开机自动启动

前置条件,Java与Tomcat目录均为/usr/local路径下。 java安装目录为:/usr/local/java tomcat安装目录为:/usr/local/tomcat 1. 创建 Tomcat 专用用户和组(可选但推荐) # 创建 tomcat 用户组 sudo groupadd tomcat#…

MySQL复习

1基本操作复习 1.1数据库创建 创建数据库create database 数据库名;判断再创建数据库create database if not exists 数据库名;创建数据库指定字符集create database 数据库名 character set 字符集;创建数据库指定排序方式create database 数据库名 collate 排序方式;创建数据…

数据结构—树(java实现)

目录 一、树的基本概念1.树的术语2.常见的树结构 二、节点的定义三、有关树结构的操作1.按照数组构造平衡 二叉搜索树2.层序遍历树3.前、中、后序遍历树(1).前序遍历树(2).中序遍历树(3).后序遍历树(4).各种遍历的情况的效果对比 4.元素添加5.元素删除1.删除叶子节点2.删除单一…

SPI 机制与 Spring Boot AutoConfiguration 对比解析

一、架构效率革命性提升 1.1 类加载效率跃升 Spring Boot 2.7引入的AutoConfiguration.imports采用清单式配置加载,对比传统SPI机制: 传统SPI扫描路径:META-INF/services/** Spring Boot新方案:META-INF/spring/org.springfram…

node-red dashboard

安装: npm install node-red-dashboard 访问: http://127.0.0.1:1880/ui 1. 创建一个新的 Dashboard 页面: 在 Node-RED 编辑器中,拖动一个 ui_dashboard 节点到工作区,并将其连接到你的数据流。 2. 配置 Dashboard 节点: 双击…

深入理解现代C++在IT行业中的核心地位与应用实践

深入理解现代C在IT行业中的核心地位与应用实践 一、C在IT行业中的不可替代性 现代IT行业中,C凭借其零成本抽象和系统级控制能力,在以下关键领域保持不可替代地位: 应用领域C优势体现典型应用案例高性能计算直接内存管理,SIMD指令…

医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)

医院挂号预约小程序 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 (1) 用户管理 (2)医院管理 (3)医生管理 &#xf…

2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明

官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认,选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…

【AI】NLP

不定期更新,建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…

vscode正则表达式使用

小标题 ^\d.\d.\d\s.*$ ^表示匹配字符串的开头。\d\.\d\.\d表示匹配一到多个数字,接着一个小数点,再接着一到多个数字,然后又一个小数点和一到多个数字,用来匹配类似 “2.1.1” 这样的标题号部分。\s表示匹配一个空格。.*表示匹配…

TCP/IP三次握手的过程,为什么要3次?

一:过程 第一次(SYN): 客户端发送一个带有SYN标志的TCP报文段给服务器,设置SYN1,并携带初始序列号Seqx(随机值),进入SYN_SENT状态。等待服务器相应。 第二次&#xff08…

vue-将组件内容导出为Word文档-docx

1. 安装依赖 首先,我们需要安装docx库,以便在前端生成Word文档。可以通过以下命令进行安装: npm install docx 2. 实现导出功能 2.1 初始化文档 使用docx库创建一个新的文档实例,并定义文档的结构和内容。我们使用Document、…

uni-app常用模板

列表样式一 ,下拉翻页查询,效果图及代码 <template><z-paging ref="paging" v-model="dataList" @query="queryList"><!-- 需要固定在顶部不滚动的view放在slot="top"的view中,如果需要跟着滚动,则不要设置slot=&q…

鸿蒙移动应用开发--UI组件布局

实验要求&#xff1a; 制作一个B站视频卡片界面&#xff0c;大致如下图所示&#xff0c;要求应用到线性布局、层叠布局等相关课堂知识。背景图、logo及文本内容不限。 实验环境 &#xff1a;DevEco Studio 实验过程&#xff1a; 步骤1&#xff1a;创建项目 1. 在您的开发环境…

NVIDIA TensorRT 深度学习推理加速引擎详解

NVIDIA TensorRT 深度学习推理加速引擎详解 文章目录 NVIDIA TensorRT 深度学习推理加速引擎详解引言文章结构 第一部分&#xff1a;TensorRT概述什么是TensorRT&#xff1f;TensorRT的核心功能和优势1. 图优化2. 量化支持3. 动态形状支持4. 多平台支持5. 编程接口6. 性能优势 …

如何用Spring AI构建MCP Client-Server架构

现代 Web 应用正加速与大语言模型(LLMs)深度融合,构建超越传统问答场景的智能解决方案。为突破模型知识边界,增强上下文理解能力,开发者普遍采用多源数据集成策略,将 LLM 与搜索引擎、数据库、文件系统等外部资源互联。然而,异构数据源的协议差异与格式壁垒,往往导致集…

gradio调用多个CSS的HTML页

很多博客介绍的gradio读取html和css比较简单&#xff0c;如果要做很细致的前端页面优化&#xff0c;比如丰富的响应式的cssjs&#xff0c;至少要有html多个css&#xff0c;是暂不能实现的。bootstrap、font-awesome、jquery等 方案一当然是直接更换htmlcss为主的部署方式&#…