Date日期工具类(数据库日期区间问题)

文章目录

  • 前言
  • DateUtils日期工具类
  • 总结


前言

在我们日常开发过程中,当涉及到处理日期和时间的操作时,字符串与Date日期类往往要经过相互转换,且在SQL语句的动态查询中,往往月份的格式不正确,SQL语句执行的效果是不同的:
例如,如果我们想查询某年某月的所有订单,如果不能动态的获取到当月的天数信息(例如4月的区间查询必须是[1-30]),是查询不出来结果的,这时候就需要我们在后端动态的根据当月天数,查询当月有多少天,完成关于月份的动态查询:
四月的订单有一条:
在这里插入图片描述
如果我们把区间单位设置为31,是查不到一条信息的:
在这里插入图片描述
区间在30就可以:
在这里插入图片描述


DateUtils日期工具类

/*** 日期操作工具类*/
public class DateUtils {/*** 日期转换-  String -> Date** @param dateString 字符串时间* @return Date类型信息* @throws Exception 抛出异常*/public static Date parseString2Date(String dateString) throws Exception {if (dateString == null) {return null;}return parseString2Date(dateString, "yyyy-MM-dd");}/*** 日期转换-  String -> Date** @param dateString 字符串时间* @param pattern    格式模板* @return Date类型信息* @throws Exception 抛出异常*/public static Date parseString2Date(String dateString, String pattern) throws Exception {if (dateString == null) {return null;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);Date date = sdf.parse(dateString);return date;}/*** 日期转换 Date -> String** @param date Date类型信息* @return 字符串时间* @throws Exception 抛出异常*/public static String parseDate2String(Date date) throws Exception {if (date == null) {return null;}return parseDate2String(date, "yyyy-MM-dd");}/*** 日期转换 Date -> String** @param date    Date类型信息* @param pattern 格式模板* @return 字符串时间* @throws Exception 抛出异常*/public static String parseDate2String(Date date, String pattern) throws Exception {if (date == null) {return null;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);String strDate = sdf.format(date);return strDate;}/*** 获取当前日期的本周一是几号** @return 本周一的日期*/public static Date getThisWeekMonday() {Calendar cal = Calendar.getInstance();cal.setTime(new Date());// 获得当前日期是一个星期的第几天int dayWeek = cal.get(Calendar.DAY_OF_WEEK);if (1 == dayWeek) {cal.add(Calendar.DAY_OF_MONTH, -1);}// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一cal.setFirstDayOfWeek(Calendar.MONDAY);// 获得当前日期是一个星期的第几天int day = cal.get(Calendar.DAY_OF_WEEK);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);return cal.getTime();}/*** 获取当前日期周的最后一天** @return 当前日期周的最后一天*/public static Date getSundayOfThisWeek() {Calendar c = Calendar.getInstance();int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;if (dayOfWeek == 0) {dayOfWeek = 7;}c.add(Calendar.DATE, -dayOfWeek + 7);return c.getTime();}/*** 根据日期区间获取月份列表** @param minDate 开始时间* @param maxDate 结束时间* @return 月份列表* @throws Exception*/public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {ArrayList<String> result = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");Calendar min = Calendar.getInstance();Calendar max = Calendar.getInstance();min.setTime(sdf.parse(minDate));min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);max.setTime(sdf.parse(maxDate));max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);SimpleDateFormat sdf2 = new SimpleDateFormat(format);Calendar curr = min;while (curr.before(max)) {result.add(sdf2.format(curr.getTime()));curr.add(Calendar.MONTH, 1);}return result;}/*** 根据日期获取年度中的周索引** @param date 日期* @return 周索引* @throws Exception*/public static Integer getWeekOfYear(String date) throws Exception {Date useDate = parseString2Date(date);Calendar cal = Calendar.getInstance();cal.setTime(useDate);return cal.get(Calendar.WEEK_OF_YEAR);}/*** 根据年份获取年中周列表** @param year 年分* @return 周列表* @throws Exception*/public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {Date useDate = parseString2Date(year, "yyyy");Calendar cal = Calendar.getInstance();cal.setTime(useDate);//获取年中周数量int weeksCount = cal.getWeeksInWeekYear();Map<Integer, String> mapWeeks = new HashMap<>(55);for (int i = 0; i < weeksCount; i++) {cal.get(Calendar.DAY_OF_YEAR);mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));}return mapWeeks;}/*** 获取某年的第几周的开始日期** @param year 年分* @param week 周索引* @return 开始日期* @throws Exception*/public static Date getFirstDayOfWeek(int year, int week) throws Exception {Calendar c = new GregorianCalendar();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, Calendar.JANUARY);c.set(Calendar.DATE, 1);Calendar cal = (GregorianCalendar) c.clone();cal.add(Calendar.DATE, week * 7);return getFirstDayOfWeek(cal.getTime());}/*** 获取某年的第几周的结束日期** @param year 年份* @param week 周索引* @return 结束日期* @throws Exception*/public static Date getLastDayOfWeek(int year, int week) throws Exception {Calendar c = new GregorianCalendar();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, Calendar.JANUARY);c.set(Calendar.DATE, 1);Calendar cal = (GregorianCalendar) c.clone();cal.add(Calendar.DATE, week * 7);return getLastDayOfWeek(cal.getTime());}/*** 获取当前时间所在周的开始日期** @param date 当前时间* @return 开始时间*/public static Date getFirstDayOfWeek(Date date) {Calendar c = new GregorianCalendar();c.setFirstDayOfWeek(Calendar.SUNDAY);c.setTime(date);c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());return c.getTime();}/*** 获取当前时间所在周的结束日期** @param date 当前时间* @return 结束日期*/public static Date getLastDayOfWeek(Date date) {Calendar c = new GregorianCalendar();c.setFirstDayOfWeek(Calendar.SUNDAY);c.setTime(date);c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);return c.getTime();}//获得上周一的日期public static Date geLastWeekMonday(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(getThisWeekMonday(date));cal.add(Calendar.DATE, -7);return cal.getTime();}//获得本周一的日期public static Date getThisWeekMonday(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(date);// 获得当前日期是一个星期的第几天int dayWeek = cal.get(Calendar.DAY_OF_WEEK);if (1 == dayWeek) {cal.add(Calendar.DAY_OF_MONTH, -1);}// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一cal.setFirstDayOfWeek(Calendar.MONDAY);// 获得当前日期是一个星期的第几天int day = cal.get(Calendar.DAY_OF_WEEK);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);return cal.getTime();}//获得下周一的日期public static Date getNextWeekMonday(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(getThisWeekMonday(date));cal.add(Calendar.DATE, 7);return cal.getTime();}//获得今天日期public static Date getToday(){return new Date();}//获得本月一日的日期public static Date getFirstDay4ThisMonth(){Calendar calendar = Calendar.getInstance();calendar.set(Calendar.DAY_OF_MONTH,1);return calendar.getTime();}public static void main(String[] args) {try {System.out.println("本周一" + parseDate2String(getThisWeekMonday()));System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));} catch (Exception e) {e.printStackTrace();}}//获取本月多少天public static int getmaxmonthdays(Date date){Calendar calendar = Calendar.getInstance();calendar.set(date.getYear(),date.getMonth(),date.getDate());return calendar.getActualMaximum(Calendar.DATE);}
}

总结

由于DateUtils 工具类中的方法都是静态的,是属于类的,所有在使用的过程中只需要用类型.方法名调用即可(DateUtils .getmaxmonthdays(Date date)),该工具类为我们提供了大量关于Date的方法,封装调用,提升变成性能的同时也降低程序的耦合性。

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

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

相关文章

mac 13.x 打开第三方应用,提示已损坏无法打开

前排提示&#xff0c;不一定有效 1、先在终端执行下面这个&#xff0c;因为要提权&#xff0c;输入自己的密码 sudo xattr -r -d com.apple.quarantine 具体应用 # 具体应用是一个路径&#xff0c;拖入 访达——应用程序——第三方应用 到终端就行 # sudo xattr -r -d com.app…

数据结构--二叉树-堆(1)

文章目录 树概念相关的基本概念树的表示 二叉树概念特殊二叉树性质 堆二叉树的顺序结构堆的概念 堆的实现初始化数组初始化为堆向上调整向下调整插入删除打印、摧毁、判空、获取堆顶数据验证 堆的应用堆排序TopK问题 树 概念 树是一种常见的非线性的数据结构&#xff0c;&…

ERROR 之 SpringMVC开发注解版之版本问题

如果你也和我一样&#xff0c;完全是按照狂神老师的代码来敲的&#xff0c;不用注解版的情况下是不会出错的&#xff0c;但是一用注解版&#xff0c;就出现了404&#xff0c;500的类型的错误。那我真诚的建议你换个jdk版本,再来试试。我试了3遍&#xff0c;事实证明用jdk1.8&am…

约瑟夫环(循环列表实现)

约瑟夫&#xff08;Joseph&#xff09;问题的一种描述是&#xff1a;编号为1&#xff0c;2&#xff0c;3&#xff0c;…&#xff0c;n的n个人按顺时针方向围坐一圈。每人持有一个密码&#xff08;正整数&#xff09;。一开始任选一个正整数作为报数上限值m&#xff0c;从第一个…

echarts环图配置

echarts环图配置 1、安装echarts npm install echarts4.9.02、页面引入echarts import echarts from echarts;3、应用 template片段 <div class"chart-wrap"><div id "treeChart" style "width: 180px; height:180px;" ><…

【回眸】牛客网刷刷刷!(八)——中断专题

目录 前言 1、在CortexM内核中&#xff0c;当系统响应一个中断时 2、用与非门和或非门可以实现其他基本门电路。进而实现任何逻辑电路 3、cpu interface提供了功能包含 4、以Cortex-M3内核为例&#xff0c;如果某个中断在得到响应之前&#xff0c;其请求信号以若干的脉冲的…

windows 下载安装 mysql

windows 下载安装 mysql 官网地址&#xff1a;https://dev.mysql.com/ 下载地址&#xff1a;https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.34.0.msi 点击 Downloads 点击 MySQL Community (GPL) Downloads 点击 MySQL Installer for Window…

qt 正则表达式

以上是正则表达式的格式说明 以下是自己写的正则表达式 22-25行 是一种设置正则表达式的方式&#xff0c; 29-34行 : 29行 new一个正则表达式的过滤器对象 30行 正则表达式 的过滤格式 这个格式是0-321的任意数字都可以输入 31行 将过滤格式保存到过滤器对象里面 32行 将验…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧&#xff0c;具体内容包含NPM介绍、NPM命令、常用模块等内容&#xff0c;还包…

RK3399平台开发系列讲解(内核调试篇)USB摄像头快速测试

🚀返回专栏总目录 文章目录 一、检测设备二、安装必要的库三、 mjpeg-stream 安装四、实时预览沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇介绍如何快速测试 USB 摄像头。 一、检测设备 将 USB 摄像头插上,查看是否找到设备,输入指令:v4l2-ctl --list-d…

谈一谈冷门的C语言爬虫

目录 C语言写爬虫是可行的 C语言爬虫不受待见 C语言爬虫有哪些可用的库和工具 C语言爬虫示例 总结 在当今的编程世界中&#xff0c;C语言相比于一些主流编程语言如Python、JavaScript等&#xff0c;使用范围相对较窄。然而&#xff0c;尽管C语言在爬虫领域的应用并不常见&…

Django Form实现表单使用及应用场景

首先需要定义一个使用场景&#xff1a; 音乐网站的前端部分可以添加上传歌手的单曲&#xff0c; 这个添加页面就使用django form表单来实现。 目录 数据表内容 歌手表及表模型 单曲表及表模型 演示表单使用 设置路由 创建form.py 视图实例化表单类 模板使用表单对象 表…

Spring系列文章1:Spring入门程序

一、什么是spring 一个java框架、java语言开发&#xff0c;轻量级、开源框架、在j2se、j2ee中都可以使用。它是一个管理对象的容器&#xff0c;Spring 容器不装文本&#xff0c;数字。装的是java对象。 核心技术&#xff1a;ioc、aop 官网地址 https://spring.io 项目列表…

第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

包管理工具--》其他包管理器之cnpm、pnpm、nvm

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用&#xff08;一&#xff09; 二、包管理工具--》npm的配置及使用&#xff08;二&#xff09; 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

软件设计师学习笔记10-死锁资源数计算+进程资源图+段页式存储

目录 1.死锁资源数计算 1.1死锁 1.2进程管理与死锁资源的计算 2.进程资源图 3.段页式存储 3.1页式存储 3.1.1页式存储组织 3.1.2完整页表及页面淘汰原则 3.1.3页面置换算法(了解一下) 3.2段式存储 1.死锁资源数计算 1.1死锁 (1)死锁的概念&#xff1a;所谓死锁&…

Matlab学习-自定义函数

Matlab学习-自定义函数 常用自定义函数 文章目录 Matlab学习-自定义函数1. 打印时间2. 计算统计参数3. 画图函数 1. 打印时间 function result calculate_time(time)% Function describe : calculate time% Input : time:N*1% Output : result.hour/min/sec hour/min/sec…

构建全面 AI Agent 解决方案:Chocolate Factory 框架的文本到 UI、图表和测试用例生成...

长太不看版&#xff1a;基于领域驱动设计思考的 AI Agent 框架 Chocolate Factory&#xff0c;框架现在还在 PoC 阶段&#xff0c;欢迎加入开发。&#xff08;当前主要关注于 SDLC AIGC 的场景&#xff09;。 GitHub&#xff1a;https://github.com/unit-mesh/chocolate-facto…

文件上传之图片马混淆绕过与条件竞争

一、图片马混淆绕过 1.上传gif imagecreatefromxxxx函数把图片内容打散&#xff0c;&#xff0c;但是不会影响图片正常显示 $is_upload false; $msg null; if (isset($_POST[submit])){// 获得上传文件的基本信息&#xff0c;文件名&#xff0c;类型&#xff0c;大小&…

迷你无人车 Navigation 导航(3)

迷你无人车 Navigation 导航&#xff08;3&#xff09; 自己实现了对于迷你无人车关节的控制&#xff0c;由于原本的关节布置仅支持阿克曼转向&#xff0c;因此先进行阿克曼转向的控制 修改 URDF 文件 添加 transmission 标签&#xff0c;定义关节的驱动 <transmission …