Date 日期时间工具类,针对日期的一些常用的处理方法


/*** <li>说明: 日期时间工具类,针对日期的一些常用的处理方法。* <li>创建日期:2022-05-04* @author lyy*/
public final class DateUtils {/** 日期格式“年月日”,yyyyMMdd(如20121231)  */public static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");/** 日期格式“年-月-日”,yyyy-MM-dd(如2012-12-31)  */public static final SimpleDateFormat yyyy_MM_dd = new SimpleDateFormat("yyyy-MM-dd");/** 默认日期格式“年-月-日”  */public static final SimpleDateFormat DEFAULT_FORMAT = yyyy_MM_dd;/** 日期格式“年-月-日 时:分:秒”,yyyy-MM-dd HH:mm:ss(如2012-12-31 20:31:18)  */public static final SimpleDateFormat yyyy_MM_dd_HH_mm_ss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/** 日期格式“年-月-日 时:分:秒:毫秒”,yyyy-MM-dd HH:mm:ss(如2012-12-31 20:31:18)  */public static final SimpleDateFormat yyyy_MM_dd_HH_mm_ss_SSS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");	/** 日期格式“年-月-日 时:分”,yyyy-MM-dd HH:mm(如2012-12-31 20:31)  */public static final SimpleDateFormat yyyy_MM_dd_HH_mm = new SimpleDateFormat("yyyy-MM-dd HH:mm");/** 日期格式“年月日时分秒”,yyyyMMddHHmmss(如20121231203118)  */public static final SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyyMMddHHmmss");	/** 日期格式“年月日时分秒毫秒”,yyyyMMddHHmmssSSS(如20121231203118978)  */public static final SimpleDateFormat yyyyMMddHHmmssSSS = new SimpleDateFormat("yyyyMMddHHmmssSSS");/** 日期格式“年月日时分秒毫秒”,yyyy-MM-ddHH:mm:ssSSS(如2012-12-3120:31:18523)  */public static final SimpleDateFormat yyyy_MM_ddHH_mm_ssSSS = new SimpleDateFormat("yyyy-MM-ddHH:mm:ssSSS");/** 日期格式“月日”,MMdd(如0121)  */public static final SimpleDateFormat MMdd = new SimpleDateFormat("MMdd");/*** <li>说明:禁止实例化该类*/private DateUtils() {}/*** <li>说明:使用默认日期格式(yyyy-MM-dd)解析日期字符串* @param String date:日期字符串* @return Date 解析成功返回的日期对象* @throws ParseException*/public static Date parse(String date) throws ParseException{return DEFAULT_FORMAT.parse(date);}/*** <li>说明:使用指定日期格式解析日期字符串* @param String date:日期字符串* @param String format:日期格式* @return Date 解析成功返回的日期对象* @throws ParseException*/public static Date parse(String date, String format) throws ParseException{return new SimpleDateFormat(format).parse(date);}    /*** <li>说明:根据格式化字符串,返回当前系统时间的字符串* @param String format:日期时间格式化字符串* @return String 当前系统时间的字符串* @throws */public static String getToday(String format) {return new SimpleDateFormat(format).format(new Date());}/*** 根据格式化字符串,返回指定时间的字符串* @param date 指定时间* @param format 日期时间格式化SimpleDateFormat* @return 指定时间的字符串*/public static String format(Date date, SimpleDateFormat format) {if (date == null) {return null;}return format.format(date);}/*** <li>说明:根据格式化对象,返回当前系统时间的字符串* @param format 日期时间格式化对象* @return String 当前系统时间的字符串*/public static String getToday(SimpleDateFormat format) {return format.format(new Date());}/*** <li>说明:默认返回当前系统时间字符串,格式为“yyyy-MM-dd”。* @return String 当前系统时间字符串,格式为“yyyy-MM-dd* @throws */public static String getToday() {return new SimpleDateFormat("yyyy-MM-dd").format(new Date());}/*** <li>说明:默认返回当前系统时间字符串,格式为“MMdd”。* @return String 当前系统时间字符串,格式为“yyyy-MM-dd* @throws */public static String getTodayMMdd() {return MMdd.format(new Date());} /*** <li>说明:获得两个日期的月差* @param Calendar one:第一个日历对象* @param Calendar two:第二个日历对象* @return int 相差的月数* @throws */public static int monthDifference(Calendar one, Calendar two) {if (null == one || null == two) {throw new NullPointerException("参数对象为空。");}Calendar after = one;Calendar before = two;if (one.before(two)) {after = two;before = one;}int deffYear = Math.abs(after.get(Calendar.YEAR) - before.get(Calendar.YEAR));int deffMonth = after.get(Calendar.MONTH) - before.get(Calendar.MONTH);/*if (deffMonth < 0) {deffYear = deffYear - 1;deffMonth = Math.abs(deffMonth);}*/  //错误的逻辑块return deffYear * 12 + deffMonth;}/*** <li>说明:获得两个日期的月差* @param Date one:第一个日期* @param Date two:第二个日期 * @return int 相差的月数* @throws */public static int monthDifference(Date one, Date two) {Calendar first = new GregorianCalendar();first.setTime(one);Calendar second = new GregorianCalendar();second.setTime(two);return monthDifference(first, second);}/*** <li>说明:获得两个日期的月差* @param String one:第一个日期字符串,格式必须为“yyyy-MM-dd”* @param String two:第二个日期字符串,格式必须为“yyyy-MM-dd”* @return int 相差的月数* @throws ParseException*/public static int monthDifference(String one, String two)throws ParseException {Format format = new SimpleDateFormat("yyyy-MM-dd");Date first = (java.util.Date) format.parseObject(one);Date second = (java.util.Date) format.parseObject(two);return monthDifference(first, second);}/*** <li>说明:是否为月的最后一天* @param Calendar calendar:日历对象* @return boolean true=是,false=否* @throws */public static boolean isLastDayOfMonth(Calendar calendar) {Calendar today = calendar;Calendar tomorrow = (Calendar) calendar.clone();tomorrow.add(Calendar.DAY_OF_MONTH, 1);int todayYear = today.get(Calendar.YEAR);int todayMonth = today.get(Calendar.MONTH) + 1;int tomorrowYear = tomorrow.get(Calendar.YEAR);int tomorrowMonth = tomorrow.get(Calendar.MONTH) + 1;//是否为当月最后一天if (tomorrowYear > todayYear || (tomorrowYear == todayYear && tomorrowMonth > todayMonth)) {return true;}return false;}/*** <li>说明: 是否为月的最后一天* @param Date date:日期对象 * @return boolean true=是,false=否* @throws */public static boolean isLastDayOfMonth(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return isLastDayOfMonth(calendar);}/*** <li>说明:当前系统时间当天是否为月的最后一天* @return boolean true=是,false=否* @throws */public static boolean isLastDayOfMonth() {return isLastDayOfMonth(Calendar.getInstance());}/*** <li>说明:将数字表示的月份转换位成中文表示的月份* @param int month:数字月份* @return String 中文月份* @throws */public static String convertMonth(int month) {switch (month) {case Calendar.JANUARY:return "一月";case Calendar.FEBRUARY:return "二月";case Calendar.MARCH:return "三月";case Calendar.APRIL:return "四月";case Calendar.MAY:return "五月";case Calendar.JUNE:return "六月";case Calendar.JULY:return "七月";case Calendar.AUGUST:return "八月";case Calendar.SEPTEMBER:return "九月";case Calendar.OCTOBER:return "十月";case Calendar.NOVEMBER:return "十一月";case Calendar.DECEMBER:return "十二月";default:throw new IllegalArgumentException("表示月份的参数无效:" + month);}}/*** <li>说明:将数字表示的周天转换位成中文表示的周天* @param int dayOfWeek:该天在一周内的数字序号,从0开始(周日0-周六6)* @return String 返回具体周天名称* @throws */public static String convertDayOfWeek(int dayOfWeek) {switch (dayOfWeek) {case Calendar.SUNDAY:return "周日";case Calendar.MONDAY:return "周一";case Calendar.TUESDAY:return "周二";case Calendar.WEDNESDAY:return "周三";case Calendar.THURSDAY:return "周四";case Calendar.FRIDAY:return "周五";case Calendar.SATURDAY:return "周六";default:throw new IllegalArgumentException("参数无效:" + dayOfWeek);}}/*** <li>说明:将数字表示的周天转换位成中文表示的星期* @param int dayOfWeek:该天在一星期内的数字序号,从0开始(星期天0-星期六6)* @return String 星期几名称* @throws */public static String convertDayOfWeek2(int dayOfWeek) {switch (dayOfWeek) {case Calendar.SUNDAY:return "星期天";case Calendar.MONDAY:return "星期一";case Calendar.TUESDAY:return "星期二";case Calendar.WEDNESDAY:return "星期三";case Calendar.THURSDAY:return "星期四";case Calendar.FRIDAY:return "星期五";case Calendar.SATURDAY:return "星期六";default:throw new IllegalArgumentException("参数无效:" + dayOfWeek);}}/*** <li>说明:获取当天是星期几。* 注意:不能使用new Date().getDay()获取当天在星期中的位置,应该使用Calendar.getInstance().get(Calendar.DAY_OF_WEEK)获取当天在星期中的位置* @return String 星期几名称* @throws */public static String getTodayOfWeek2() {return convertDayOfWeek2(Calendar.getInstance().get(Calendar.DAY_OF_WEEK));}/*** <li>说明:获取当天是周几。* 注意:不能使用new Date().getDay()获取当天在星期中的位置,应该使用Calendar.getInstance().get(Calendar.DAY_OF_WEEK)获取当天在星期中的位置* @return String 返回具体周天名称* @throws */public static String getTodayOfWeek() {return convertDayOfWeek(Calendar.getInstance().get(Calendar.DAY_OF_WEEK));}  /*** * <li>说明:将毫秒数转换为日期格式的字符串* @param millSeconds 毫秒数* @param parseStr 日期格式化字符串 如"yyyy-MM-dd hh:mm:ss"* @return 日期格式的字符串*/public static String getDateByMillSeconds(long millSeconds, String parseStr){        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(parseStr);  String sb=format.format(getDateByMillSeconds(millSeconds));  return sb;}/*** * <li>说明:将毫秒数转换为日期* @param millSeconds 毫秒数* @return 日期*/public static Date getDateByMillSeconds(long millSeconds){Date date = new Date(millSeconds);  GregorianCalendar gc = new GregorianCalendar();   gc.setTime(date);  return gc.getTime();}/*** * <li>说明:获取服务器时间,本月的第一天* @return 获取服务器时间,本月的第一天*/public static String getFirstDayByCurrentMonth(){Calendar calendar  =   new  GregorianCalendar();calendar.set( Calendar.DATE,  1 );SimpleDateFormat simpleFormate  =   new  SimpleDateFormat( "yyyy-MM-dd" );return simpleFormate.format(calendar.getTime());}/*** * <li>说明:获取服务器时间, 本月的最后一天* @return 获取服务器时间, 本月的最后一天*/public static String getLastDayByCurrentMonth(){Calendar calendar  =   new  GregorianCalendar();calendar.set( Calendar.DATE,  1 );calendar.roll(Calendar.DATE,  - 1 );SimpleDateFormat simpleFormate  =   new  SimpleDateFormat( "yyyy-MM-dd" );return simpleFormate.format(calendar.getTime());}/*** * <li>说明:获取实际工期(分钟数)临时使用,以后有工作日历再做修改* @param realStartDate 实际开工时间* @param realEndDate 实际完工时间* @return 实际工期(分钟数)* @throws Exception*/public static Long getRealWorkminutes(Date realStartDate, Date realEndDate) throws Exception{BigDecimal realWorkminutes = new BigDecimal("0");long startTime = 0l;long endTime = 0l;long timeInterval = 0l; if(realStartDate != null && realEndDate != null) {startTime = realStartDate.getTime();endTime = realEndDate.getTime();timeInterval = endTime - startTime;if(timeInterval > 0){int day = (int)timeInterval/(24*60*60*1000);        int hour = (int)timeInterval/(60*60*1000)-day*24;          int min = (int)(timeInterval/(60*1000))-day*24*60-hour*60;if(day >= 1){realWorkminutes = new BigDecimal(day*8*60);if(hour >= 1){realWorkminutes = realWorkminutes.add(new BigDecimal(hour*20));}if(min >=1){realWorkminutes = realWorkminutes.add(new BigDecimal(min));}}else{if(hour >= 1){realWorkminutes = realWorkminutes.add(new BigDecimal(hour*60>=480?480:hour*60));}if(min >=1){realWorkminutes = realWorkminutes.add(new BigDecimal(min));}if(realWorkminutes.compareTo(new BigDecimal(480)) > 0) realWorkminutes = new BigDecimal(480);}}}return Long.valueOf(String.valueOf(realWorkminutes));}/*** <li>说明:得到两个日期间隔的天数* @param String beginDate 开始日期"yyyy-MM-dd"* @param String endDate 结束日期"yyyy-MM-dd"* @return int 相差天数* @throws ParseException*/public static int getDaysBetween(String beginDate, String endDate)throws ParseException {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date bDate = format.parse(beginDate);Date eDate = format.parse(endDate);return getDaysBetween(bDate, eDate);}/*** <li>说明:得到两个日期间隔的天数* @param Date beginDate 开始日期* @param Date endDate 结束日期* @return int 相差天数* @throws ParseException*/public static int getDaysBetween(Date beginDate, Date endDate)throws ParseException {Calendar g1 = new GregorianCalendar();g1.setTime(beginDate);Calendar g2 = new GregorianCalendar();g2.setTime(endDate);int elapsed = 0;GregorianCalendar gc1, gc2;if (g2.after(g1)) {gc2 = (GregorianCalendar) g2.clone();gc1 = (GregorianCalendar) g1.clone();} else {gc2 = (GregorianCalendar) g1.clone();gc1 = (GregorianCalendar) g2.clone();}gc1.clear(Calendar.MILLISECOND);gc1.clear(Calendar.SECOND);gc1.clear(Calendar.MINUTE);gc1.clear(Calendar.HOUR_OF_DAY);gc2.clear(Calendar.MILLISECOND);gc2.clear(Calendar.SECOND);gc2.clear(Calendar.MINUTE);gc2.clear(Calendar.HOUR_OF_DAY);while (gc1.before(gc2)) {gc1.add(Calendar.DATE, 1);elapsed++;}return elapsed;}    /*** <li>说明:根据开始时间和时长获取完成时间* @param startTime 开始时间* @param timeInterval 时长* @return 完成时间*/public static long getFinalTime(long startTime, long timeInterval) {return startTime + timeInterval;}}

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

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

相关文章

Web前端期末大作业--中国港珠澳大桥网页设计(HTML+CSS+JavaScript)实现

博主介绍&#xff1a;✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 目录 前言介绍 项目简介 设计布局 功能截图 首页 项目简…

Web前端期末大作业--响应式少儿舞蹈网页设计(HTML+CSS+JavaScript)实现

博主介绍&#xff1a;✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星Top50、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 公众号&#xff1a;java李阳勇 简历模板、学习资料、面试题库…

Java基础课程设计-学生管理系统《控制台版本》

博主介绍&#xff1a;✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f345;…

Java基础课程设计-模拟ATM银行管理系统《控制台版本》

博主介绍&#xff1a;✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f345;…

享誉全球的 Java 经典著作《Java核心技术》Java 17

Java 诞生 27 年来&#xff0c;这本享誉全球的 Java 经典著作《Core Java》一路伴随着 Java 的成长&#xff0c;得到了百万 Java 开发者的青睐&#xff0c;几乎出现在每个“学Java要看什么书”类似的书单里&#xff0c;影响了几代技术人。 27年间&#xff0c;每当 Java 有新的…

【云原生】Spring Cloud微服务学习路线汇总

Spring Cloud是什么&#xff1f; 简单来说Spring Cloud是一系列框架的组成集合。主要利用的我们现在主流应用的Spring Boot框架开发便利性、巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都…

Oracle12C配置监听IP地址

根据自己的安装路径修改2个地方listener.ora和tnsnames.ora 我的路径在&#xff1a;E:\app\Administrator\product\12.2.0\dbhome_1\network\admin listener.ora文件 # listener.ora Network Configuration File: E:\app\Administrator\product\12.2.0\dbhome_1\NETWORK\ADMI…

强大的SQL计算利器-SPL

现代应用开发中&#xff0c;通常只用SQL实现简单的数据存取动作&#xff0c;而主要的计算过程和业务逻辑直接在应用程序中实现&#xff0c;主要原因在于&#xff1a; 过于复杂的SQL很难调试、编写、阅读、修改。SQL有方言特征&#xff0c;大量使用SQL后&#xff0c;会导致程序…

Java使用Queryable-pageable实现分页

在维护老项目的时候需要对部分分页进行手动修改、方式是获取前端的分页参数 page以及rows、 new PageRequest对象把分页参数传进去、通过 queryable.setPageable(pageable);保存、最后进行调用。 完整代码如下&#xff1a; ResponseBodyRequestMapping(value "getLbjzkL…

【毕业季·进击的技术er】大学生计算机毕业设计应该这样写

活动地址&#xff1a;毕业季进击的技术erhttps://marketing.csdn.net/p/f4a818f6455f3a9a7a20c89f60ad35f7 目录 扉页 摘要 目录 一 绪论 二、相关技术环境介绍 三、系统需求分析 四、系统架构设计 五、系统实现 六、系统测试 致谢 参考文献 以一个过来学长的角度来看…

【云原生】SpringCloud是什么?

SpringCloud是一个提供一些服务框架的服务治理平台。它包括&#xff1a;服务注册和发现、配置中心、消息中心、负载平衡、数据监控等。封装了微服务基础架构框架Netflix的多个开源组件&#xff0c;并与云平台和Spring boot框架集成。 SpringCloud也为开发人员提供了一个快速构…

Java字符串转为驼峰格式构建工具类

字符串转为驼峰格式 构建工具类 package com.yt.common.util; import com.yt.common.dto.NameCode; import com.yt.exam.enums.ZyEnum;import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 字符串转为驼峰格式 构建工具类* author L…

Java工具类 BeanUtils库介绍以及对象拷贝

前言介绍&#xff1a; BeanUtils工具由Apache软件组织编写&#xff0c;提供给我们开发者使用主要解决的问题是&#xff1a;把对象的属性数据封装到对象中。我们在开发中经常会从各种配置文件中读取相应的数据&#xff0c;需要明白的一点是从配置文件中读取到的数据都是String&a…

Http请求:Google调用本地摄像头权限开启

项目场景&#xff1a; 最近在做一个考试培训系统&#xff01;里面用到了监控摄像需要调用本地摄像头 解决方案&#xff1a; 打开谷歌浏览器&#xff0c;输入chrome://flags/回车&#xff1a; 在输入框输入unsafely-treat-insecure-origin-as-secure 选择enable 点击relaunch重…

快收藏!最适合计算机大学生的Java毕业设计项目--高校食堂点餐系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&#…

MySql根据字段名查询重复记录并删除!只保留一条

最近在处理业务数据的时候&#xff01;在几W条记录里存在着些相同的记录,如何用SQL语句,删除掉重复的呢? 可以用以下方法进行处理 其实很简单&#xff01;就是查找表中多余的重复记录&#xff0c;重复记录是根据单个字段来查询、然后删除其他重复的记录即可 查询重复记录 SEL…

基于Java+Spring+mybatis+vue+element实现酒店管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&#…

MyBatis批量插入为什么比单条插入块?

今天在利用excel处理业务数据的时候开始打算一条一条插入数据库&#xff01;因为要做数据校验和数据保存返回id之后进行其他表也插入&#xff01;大约有30000多条数据库吧&#xff01;花了大约3-5分钟&#xff0c;前端也会出现超时请求问题、让我意识到一条一条插入影响性能&am…

javaList<Map<String, Object>>升序、降序

降序&#xff1a; static class MapComparatorDesc implements Comparator<Map<String, Object>> {Overridepublic int compare(Map<String, Object> m1, Map<String, Object> m2) {Double v1 Double.valueOf(m1.get("avgScore").toString(…

无语!Jenkins 也宣布弃用 Java 8

继Java 之父 James Gosling 先前称&#xff0c;开发者应尽快弃用 JDK 8&#xff0c;可以选择 JDK 17 LTS&#xff0c;因为后者在各个方面都带来了巨大的改进。 开源 Devops 工具 Jenkins 宣布&#xff1a;从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始&am…