【Java8】java.time 根据日期获取年初年末、月初月末、日初日末
目录
- 年初年末
- 月初月末
- 3. 日初日末
记录日常开发中的常用的日期转换代码,算是一篇Java 8时间API使用实操的简短总结文。
下文中,都以LocalDateTime为例,在不声明的情况下如下方法一般都适用于Java8中LocalDate、LocalDateTime、OffsetDateTime、ZonedDateTime等时间类,不适用某些类时会在文中有提醒。
年初年末
- 使用TemporalAdjusters工具类。
TemporalAdjusters.firstDayOfYear():将月份和日期调整至1月1日TemporalAdjusters.lastDayOfYear():将月份和日期调整至12月31日TemporalAdjusters.firstDayOfMonth():将月份调整至当月的第一天(1)TemporalAdjusters.lastDayOfMonth():将月份调整至当月的最后一天(28-31)TemporalAdjusters.firstDayOfNextMonth():将月份和日期调整为下个月的第一天TemporalAdjusters.firstDayOfNextYear():将年份和日期调整为下一年的第一天
LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()); // 2023-01-01T14:11:27.062
- 使用
with、adjustInto方法,通过TemporalAdjuster的实现类比如使用MonthDay来调整时间。后面的调整日期、时分秒都可以借鉴下面的方法来实现。
MonthDay lastDayOfMonth = MonthDay.of(12, 31);
LocalDateTime with = LocalDateTime.now().with(lastDayOfMonth);
// 等价于
LocalDateTime adjustInto = (LocalDateTime) lastDayOfMonth.adjustInto(LocalDateTime.now());
月初月末
- 使用TemporalAdjusters
LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()); // 2023-10-31T14:34:01.958
- 通过
ChronoField类实现
这种方法只能用来计算月初。(年月也可以通过这种方式来实现,不过有了MonthDay就没有必要那么麻烦了)。
LocalDateTime with = LocalDateTime.now().with(ChronoField.DAY_OF_MONTH, 1);
- 通过
YearMonth类实现
与计算年初、年末、月初不同,月末是一个浮动值(28-31),需要根据是否是闰年,是年份的第几个月来最终确认月末值,手工实现比较麻烦。不过Java8中有很多类已经完成了这类计算。
比如使用YearMonth自带的月初月末计算:
YearMonth yearMonth = YearMonth.now();
// 当然月初也可以用这种形式,不过也挺麻烦的
LocalDate startOfMonth = yearMonth.atDay(1);
LocalDate endOfMonth = yearMonth.atEndOfMonth();
boolean leapYear = yearMonth.isLeapYear();
YearMonth的方法可能并不能直接得到想要的结果,需要我们再转换一次时间:
LocalDateTime now = LocalDateTime.now();
LocalDateTime with = now.with(YearMonth.from(now).atDay(1));
LocalDateTime adjustInto = (LocalDateTime) YearMonth.from(now).atEndOfMonth().adjustInto(now);
3. 日初日末
日初日末也没那么花俏了,值都是固定不变的,日初就是00:00:00.000,日末就是23:59:59.999,with、adjustInto方法随便用,能达成目标即可。
- 使用
LocalDate.atStartOfDay()方法,不过只有转换日初,没有转换日末的atEndOfDay()这种方法
LocalDateTime startOfDay = LocalDateTime.now().toLocalDate().atStartOfDay();
LocalDateTime startOfDay1 = LocalDate.now().atStartOfDay();
- 使用
LocalDate.atTime()设置具体时间。
LocalDateTime min = LocalDate.now().atTime(LocalTime.MIN); // 2023-09-22T00:00 | min = 00:00
LocalDateTime max = LocalDate.now().atTime(LocalTime.MAX); // 2023-09-22T23:59:59.999999999 | max = 23:59:59.999999999
- 其他方法。
// 当然也可以这样
LocalDateTime min = LocalDateTime.now().with(LocalTime.MIN);
// 这样
LocalDateTime atDate = LocalTime.MAX.atDate(LocalDateTime.now().toLocalDate());
// 甚至你也可以直接设置时间
LocalDateTime with = LocalDateTime.now().with(LocalTime.of(0, 0, 0));
LocalDateTime adjustInto = (LocalDateTime) LocalTime.of(23, 59, 59).adjustInto(LocalDateTime.now());
简单总结了下日常碰到的Java8用得到的方法。欢迎补充评论,谢谢!
相关文章:
【Java8】java.time 根据日期获取年初年末、月初月末、日初日末
目录 年初年末月初月末3. 日初日末 记录日常开发中的常用的日期转换代码,算是一篇Java 8时间API使用实操的简短总结文。 下文中,都以LocalDateTime为例,在不声明的情况下如下方法一般都适用于Java8中LocalDate、LocalDateTime、OffsetDateTi…...
【LeetCode: 137. 只出现一次的数字 II | 位运算 | 哈希表】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. DOMContentLoaded 1.1 属性 1.2 A…...
SpringMVC源码分析(一)启动流程分析
a、SpringMVC 在启动过程中主要做了什么事情? SpringMVC在启动过程中是什么时候解析web.xml文件的,又是什么时候初始化9大内置对象的? <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xml…...
ARM 10.12
设置按键中断,按键1按下,LED亮,再按一次,灭 按键2按下,蜂鸣器响。再按一次,不响 按键3按下,风扇转,再按一次,风扇停 src/key.c #include"key.h"//按键3的配…...
vue-rouer 路由
安装/配置: //进入项目目录:(在搭建项目的时候安装了) cnpm install vue-router --save旧版路由 需要自己配置 //项目中载入,一般在main.js中载入:import VueRouter from vue-routerVue.use(VueRouter)let router new VueRouter({}) //其中配置路径和地址//在Vue中引入:n…...
元数据的前世今生
什么是元数据 元数据(Metadata)是描述数据的数据。它是一组信息,用于描述数据的特征、属性、结构和内容,以便更好地管理、理解、组织和使用数据。让人们能够清楚拥有什么数据、代表什么、源自何处、如何在系统中移动,以及哪些人可以使用源数据,如何使用。 元数据通常包…...
Python实现简易过滤删除数字的方法
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如果想从一个含有数字,汉字,字母的列表中滤除仅含有数字的字符, 当然可以采取正则表达式来完成,但是有点太麻烦了…...
软件测试定位bug方法+定位案例(详解)
1、问题bug定位技巧 首先,作为开发也好,测试也好,定位问题有一个总的思路,而这个思路是和数据的走向一致的。 大致是这样: 用户层面问题 -> Web页面/软件界面 -> 中间件 -> 后端服务 -> 代码 -> 数据…...
【算法练习Day21】组合剪枝
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 组合剪枝总结: …...
NPM相关命令
临时使用 npm --registry https://registry.npm.taobao.org install 包名2.永久设置为淘宝镜像 npm config set registry https://registry.npm.taobao.org3.换回国外官方源 npm config set registry https://registry.npmjs.org4.查看使用的源地址 npm config get registr…...
Kubernetes 集群部署 Prometheus 和 Grafana
Kubernetes 集群部署 Prometheus 和 Grafana 文章目录 Kubernetes 集群部署 Prometheus 和 Grafana一.部署 node-exporter1.node-exporter 安装2.部署 node-exporter 二.部署Prometheus1.Prometheus 安装和配置(1)创建 sa 账号,对 sa 做 rbac…...
【算法-动态规划】零钱兑换 II-力扣 518
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
Hadoop3教程(六):HDFS中的DataNode
文章目录 (63)DataNode工作机制(64)数据完整性(65)掉线时限参数设置参考文献 (63)DataNode工作机制 DataNode内部存储了一个又一个Block,每个block由数据和数据元数据组…...
Macos音乐制作:Ableton Live 11 Suite for Mac中文版
Ableton Live 11是一款数字音频工作站软件,用于音乐制作、录音、混音和现场演出。它由Ableton公司开发,是一款极其流行的音乐制作软件之一。 以下是Ableton Live 11的一些主要特点和功能: Comping功能:Live 11增加了Comping功能…...
ThinkPHP5小语种学习平台
有需要请加文章底部Q哦 可远程调试 ThinkPHP5小语种学习平台 一 介绍 此小语种学习平台基于ThinkPHP5框架开发,数据库mysql,前端bootstrap。平台角色分为学生,教师和管理员三种。学生注册登录后可观看学习视频,收藏视频…...
升级包版本之后Reflections反射包在springboot jar环境下扫描不到class排查过程记录
📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…...
Excel 函数大全应用,包含各类常用函数
Excel 函数大全应用,各类函数应用与案例实操。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作, Power BI 商业智能 68集, 数据库Mysql8.0 54集 数据库Oracle21C 142集, Office 2021实战, Python 数据分析࿰…...
深入浅出的介绍一下虚拟机VMware Workstation——part3(VMware快照)
虚拟机VMware使用 前言快照的原理快照的使用 前言 可以先查看之前的2篇博文,学习基础的虚拟机使用 深入浅出的介绍一下虚拟机VMware Workstation——part1 深入浅出的介绍一下虚拟机VMware Workstation——part2(详细安装与使用) 由于我们使用虚拟机的初衷就是用来…...
《Python基础教程》专栏总结篇
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
