根据指定日期获取周,月,季度,年的第一天和最后一天

news2025/1/11 0:42:44

1. 根据指定日期获取周,月,季度,年的第一天和最后一天

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 根据给定时间获取周、月度、季度、年度开始结束时间
 */
public class DateCalendarUtil {
    /**
     * @Description: 获取月份第一天
     * @Author: wsp
     **/
    public static Calendar getMonthStart(Date date) {
        // 月份开始
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);//set方法将给定日历字段设置为给定值
        // 下面代码作用是将日历设置为给定日期月份天数的第一天
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        return startCalendar;
    }

    /**
     * 获取月份最后一天
     * @param date
     * @return
     */
    public static Calendar getMonthEnd(Date date) {
        // 月份结束
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        //getActualMaximum方法用来返回给定日历字段属性的最大值
        // endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) 代码作用为返回日历该月份的最大值
        // set方法,将该日历的给定月份设置为最大天数
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return endCalendar;
    }

    /**
     * 获取季度第一天
     * 1.根据给定日期计算当前季度的第一个月份
     * 2.设置日历的月份为当前季度的第一个月份
     * 3.最后设置日历月份天数为第一天即可
     * @param date
     * @return
     */
    public static Calendar getQuarterStart(Date date) {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);
        //get方法:获取给定日历属性的值,如 endCalendar.get(Calendar.MONTH) 获取日历的月份
        // 计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第一个月份只需 月份 / 3 * 3
        startCalendar.set(Calendar.MONTH, (((int) startCalendar.get(Calendar.MONTH)) / 3) * 3);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        return startCalendar;
    }

    /**
     * 获取季度最后一天
     * @param date
     * @return
     */
    public static Calendar getQuarterEnd(Date date) {
        // 季度结束
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        //计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第三个月份只需 月份 / 3 * 3 + 2
        endCalendar.set(Calendar.MONTH, (((int) endCalendar.get(Calendar.MONTH)) / 3) * 3 + 2);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return endCalendar;
    }

    /**
     * 获取年份第一天
     * @param date
     * @return
     */
    public static Calendar getYearStart(Date date) {
        // 年份开始
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);
        startCalendar.set(Calendar.DAY_OF_YEAR, 1);
        return startCalendar;
    }

    /**
     * 获取年份最后一天
     * @param date
     * @return
     */
    public static Calendar getYearEnd(Date date) {
        // 年份结束
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);endCalendar.set(Calendar.DAY_OF_YEAR, endCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));
        return endCalendar;
    }

    /**
     * 获取当前周第一天(周一)
     * @param date
     * @return
     */
    public static Date getWeekStart(Date date) {
        Calendar calendar = Calendar.getInstance();calendar.setTime(date);
        //获取传入日期属于星期几,根据星期几进行不同处理
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        //周日:需要减去6天为周一。(当传入日期为周日时,若我们直接设置日历天数为周一,则日期会变为下一周的周一,而非当前周)
        if (dayOfWeek == 1) {
            calendar.add(Calendar.DAY_OF_MONTH, -6);
        } else {
            //周二 至 周六:直接获取周一即可
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        }
        return calendar.getTime();
    }

    /**
     * 获取当前周最后一天(周日)
     * @param date
     * @return
     */
    public static Date getWeekEnd(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(getWeekStart(date));
        calendar.add(Calendar.DAY_OF_MONTH, 6);
        return calendar.getTime();
    }

    public static void main(String[] args) throws ParseException {
        String dateStr = "2023-08-15";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(dateStr);
        String startMonthDay = sdf.format(getMonthStart(date).getTime());
        String endMonthDay = sdf.format(getMonthEnd(date).getTime());
        System.out.printf("月份的第一天:%s, 月份的最后一天:%s%n", startMonthDay, endMonthDay);
        String startQuarterDay = sdf.format(getQuarterStart(date).getTime());
        String endQuarterDay = sdf.format(getQuarterEnd(date).getTime());
        System.out.printf("季度第一天:%s, 季度最后一天:%s%n", startQuarterDay, endQuarterDay);
        String startYearDay = sdf.format(getYearStart(date).getTime());
        String endYearDay = sdf.format(getYearEnd(date).getTime());
        System.out.printf("年份第一天:%s, 年份最后一天:%s%n", startYearDay, endYearDay);
        String startWeekDay = sdf.format(getWeekStart(date));
        String endWeekDay = sdf.format(getWeekEnd(date));
        System.out.printf("当前周周一:%s, 当前周周日:%s%n", startWeekDay, endWeekDay);
    }

}

在这里插入图片描述

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

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

相关文章

OSPF在广播类型的网络拓扑中DR和BDR的选举

指定路由器(DR): 一个网段上的其他路由器都和指定路由器(DR)构成邻接关系,而不是它们互相之间构成邻接关系。 备份指定路由器(BDR): 当DR出现问题,由BDR接…

数字化转型能带来哪些价值?

数字化转型可以为个人、企业和整个社会带来广泛的价值。以下是数字化转型的一些主要优势: 1.提高效率和生产力:重复任务的自动化和简化流程可以提高效率和生产力。这使员工能够专注于更具战略性和增值性的活动。 2.增强的客户体验:数字化转…

荣耀X40 GT真机调试APP,HBuilder X刷新不到设备

今天使用荣耀X40GT进行真机调试App的时候,hbuilder怎么都刷不出来设备,经历一番风雨最终连接成功,特此记录一下。 我的设备Android版本12,MagicOS版本7.0,进行了如下配置: 1、打开“设置”-》“系统和更新”…

视频批量处理利器,轻松实现高效倒放功能

亲爱的视频编辑者们,您是否曾遇到需要将大量视频进行倒放处理的情况?但是手动一个个倒放操作繁琐又耗时,让您感到头疼?现在,我们为您推出一款全新的视频批量处理利器,让您的倒放操作变得轻松高效 第一步。…

深入源码分析kubernetes informer机制(四)DeltaFIFO

[阅读指南] 这是该系列第四篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 client-go中的存储结构DeltaFIFOdelta索引 keyqueue push操作delta push 去重 queue pop操作 总结 client-go中的存储结构…

雷军的代码,成为金山火苗,WPS的逆风翻盘,却要靠工具

苦练内功 “雷军写代码”冲上热搜。 作为中国科技界的大佬,一直享有“雷布斯”的称谓。 早年的成长经历也激励着一批批年轻人,挥洒青春,艰苦奋斗。 雷军在今年的演讲上一张海报,让很多再次看到了雷军早年写的“代码”&#xf…

CRMEB商城系统:便捷、安全、多样化的购物方式

商城系统是当今社会商业发展的重要组成部分,它以数字化、网络化的方式提供商品和服务。商城系统通过互联网技术,将商品和消费者紧密连接,方便了购物的流程和效率。 商城系统的特点之一是无国界化。传统实体商店通常受限于地理位置和时间&…

4.文件操作和IO

文章目录 1.认识文件1.1树型结构组织 和 目录1.2文件路径(Path)1.3其他知识 2.Java 中操作文件2.1File 概述2.1.1属性2.1.2构造方法2.1.3方法 2.2代码示例2.2.1示例1-get 系列的特点和差异2.2.2示例2-普通文件的创建、删除2.2.3示例3-普通文件的删除2.2.…

解决“ug12.0许可证错误-97”问题

解决“UG12.0许可证错误-97”问题的具体如下: 1、以管理员的身份打开UG许可证文件"lmtools",先点击"Config Services",再点击下图中箭头指向的”Browse"按钮。 2、进入“D:\PRogram Files\UGS\UGSLicensing”文件夹…

领航优配:EFT交易是什么意思?

EFT买卖是一种电子资金搬运买卖方法,EFT代表电子资金搬运,将现金从一个银行账户搬运到另一个银行账户。尽管这种买卖方法已经存在了几十年,但随着技能的开展,越来越多的人开始使用它。 从技能视点,EFT买卖是经过计算机…

drawio----输出pdf为图片大小无空白(图片插入论文)

自己在写论文插入图片时为了让论文图片放大不模糊,啥方法都试了,最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小,pdf的白边很大如下如所示,插入论文的时候后虽然放大不会模糊,但是白边很大会显…

企望制造ERP系统 RCE漏洞复现

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专…

vue + vue-office 实现多种文件(docx、excel、pdf)的预览

支持多种文件( docx、excel、pdf)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。 github: 《仓库地址》 演 示: 《演示效果》 功能特色 一站式:提供docx、pdf、excel多种文档的在线预览方案,有它就够了简单&#xff1a…

ad+硬件每日学习十个知识点(35)23.8.15 (接口电路:RS232、RS485、RS422,单线协议UART->TTL)

文章目录 1.RS232的物理层2.RS232的三种连线方式3.DB9和RJ45(网口)线定义4.RS232的电路设计(tx端需要上拉)5.RS232芯片MAX3221的引脚功能6.什么是压摆率?(压摆率越大越好)7.为什么有了RS232之后,还需要RS48…

keil5突然编译输出框build output 不见了

今天keil5突然编译输出框build output 不见了,但可以编译和下载。 首先尝试,在view里面打开和关闭build output window,没有反应; 其次,点击window-reset view to defaults,果然build output又恢复了&#…

国产大模型顶流「讯飞星火」:图片生成、代码生成,支持插件等重磅上线

8月12日,新华社研究院中国企业发展研究中心发布的《人工智能大模型体验报告2.0》报告中,讯飞星火以总分1013分,被评为国产卓越大模型之一。(体验地址:https://xinghuo.xfyun.cn/?ch8tcbd7p) 讯飞星火可基于…

CentOS系统环境搭建(五)——Centos7安装maven

centos系统环境搭建专栏🔗点击跳转 Centos7安装maven 下载压缩包 maven下载官网 解压 压缩包放置到/usr/local tar -xvf apache-maven-3.9.2-bin.tar.gz配置环境变量 vim /etc/profile在最下面追加 MAVEN_HOME/usr/local/apache-maven-3.9.2 export PATH${MAV…

文档比对技术难点与使用场景

文档比对技术是一种用于比较两份文档之间差异的先进技术。具备较大的技术难点和场景价值。下面将对其技术难点和使用场景进行详细探讨。 1、技术难点: 文档比对技术所面临的挑战不仅复杂多样,而且相互关联。以下深入探讨了其中的几个主要技术难点&#…

选择最适合自己的NIO, 一探流技术

目录 一、Channel1、FileChannel代码示例2、DatagramChannel代码示例3、SocketChannel 和 ServerSocketChannel代码示例 二、Buffer1、ByteBuffer示例代码2、CharBuffer示例代码3、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer 等示例代码 三、Selector1、S…

6_AccessKeyId和AccessKeySecret的环境变量配置

系列文章目录 第1章 Linux安装Docker 第2章 Docker安装jdk1.8和MySql 第3章 Docker安装redis 第4章 Jar包部署Docker 第5章 Docker-compose多服务统一编排管理 第6章 AccessKeyId和AccessKeySecret的环境变量配置 文章目录 系列文章目录前言一、WIN系统配置二、LINUX系统配置三…