Calendar根据当前(指定)日期取出指定时间

2023-11-09

以下为亲测,持续更新…

一、Calendar根据当前(指定)日期取出本周一本周日和下周一下周日时间

根据Calendar.java中定义的DAY_OF_WEEK来看

/**
     * Field number for <code>get</code> and <code>set</code> indicating the day
     * of the week.  This field takes values <code>SUNDAY</code>,
     * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
     * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
     *
     * @see #SUNDAY
     * @see #MONDAY
     * @see #TUESDAY
     * @see #WEDNESDAY
     * @see #THURSDAY
     * @see #FRIDAY
     * @see #SATURDAY
     */
    public final static int DAY_OF_WEEK = 7;

可以看出,周日作为一周的第一天,周六为最后一天
但是按照中国习惯,一周的周一应该为第一天,周日为最后一天
因此通过以下代码可以实现

根据当前(指定)日期,取出本周周一和周日,下周周一和周日

代码如下:

package com.aaa.test.entity;

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

/**
 * @program: 
 * @Date: 2019/10/27 15:35
 * @Author: Mr.SU
 * @Description:
 */
public class Test {
    public static void main(String[] args) throws Exception{
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String currDate = sdf.format(date);

        //按中国习惯,周一为第一天,周日为最后一天
        //取出周一和周日,
        Date time0 = new SimpleDateFormat("yyyy-MM-dd").parse("2019-11-04");
        Calendar cal = Calendar.getInstance();
        cal.setTime(time0);
        String mon = "";
        String sun = "";
        String nextmon = "";
        String nextsun = "";
        Date monday = null;
        Calendar calSun = Calendar.getInstance();
        calSun.setTime(time0);
        //判断当前日期是否是周日
        if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {  //是周日,取出当前时间,往前减六天,取出当前周 周一时间
            
            calSun.set(Calendar.DATE, calSun.get(Calendar.DATE) - 6);
            monday = calSun.getTime();
            mon = sdf.format(monday);
            sun = sdf.format(time0);
            System.out.println(mon);  //本周一日期
            System.out.println(sun);  //本周日日期
            
        } else {  //不是周日,取出当前周 周一时间,往后加6天,去周日时间

            //关于DAY_OF_WEEK的说明
            //Field number for get and set indicating
            //the day of the week. This field takes values
            //SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
            //and SATURDAY
            calSun.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            monday = calSun.getTime();    //本周一

            Calendar cal2 = Calendar.getInstance();
            cal2.setTime(monday);
            cal2.set(Calendar.DATE, cal2.get(Calendar.DATE) + 6);
            Date sunday = cal2.getTime();
            mon = sdf.format(monday);
            sun = sdf.format(sunday);
            System.out.println(mon);  //本周一日期
            System.out.println(sun);  //本周日日期
        }

        //根据当前日期取下周一和下周日
        //取下周一下周日
        Calendar nextCal = Calendar.getInstance();
        nextCal.setTime(monday);
        nextCal.set(Calendar.DATE, nextCal.get(Calendar.DATE) + 7);
        Date nextMonday = nextCal.getTime();  //下周一
        nextCal.set(Calendar.DATE, nextCal.get(Calendar.DATE) + 6);
        Date nextSunday = nextCal.getTime();  //下周日
        nextmon = sdf.format(nextMonday);
        nextsun = sdf.format(nextSunday);
        System.out.println(nextmon);  //下周一日期
        System.out.println(nextsun);  //下周日日期
    }
}


二、 Calendar根据当前(指定)日期取本月第一天和最后一天

		//查询本月第一天和最后一天
        Calendar cal3 = Calendar.getInstance();
        cal3.set(Calendar.DAY_OF_MONTH,1);
        System.out.println("本月第一天:"+cal3.getTime());
        cal3.roll(Calendar.DATE,-1);
        System.out.println("本月最后一天:"+cal3.getTime());

三、 Calendar根据当前(指定)日期取上月月末和上上月末

 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cale = Calendar.getInstance();
        cale.set(Calendar.DAY_OF_MONTH, 0);//上月月末
        LastDay = format.format(cale.getTime());
        logger.info("------------LastDay:" + LastDay);
        cale.set(Calendar.DAY_OF_MONTH, 0);//上上月月末
        LLastday= format.format(cale.getTime());
        logger.info("------------LLastday:" + LLastday);

四、 Calendar根据当前(指定)日期取前一天凌晨0点和当天凌晨0点

	/**
    * @Description: 获取前一天凌晨0点和当天凌晨0点
    * @param: "[page]"
    * @Return: com.sinosoft.entity.Page
    * @Author: supenghui
    * @Date: 2019/12/13 3:10
    */
    public Page getDate(Page page){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.ssssss");

        //获取前一天的凌晨和当天凌晨0点
        Calendar ca = Calendar.getInstance();
        ca.set(Calendar.HOUR_OF_DAY,0);
        ca.set(Calendar.MINUTE,0);
        ca.set(Calendar.SECOND,0);
        Date cd = ca.getTime();
        String currDate = sdf.format(cd);
        ca.add(Calendar.DAY_OF_MONTH,-1);
        Date fd = ca.getTime();
        String frontDate = sdf.format(fd);

        page.getPd().put("frontDate",frontDate);   //昨天凌晨0点
        page.getPd().put("currDate",currDate);      //当天凌晨零点

        return page;
    }

author:su1573

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Calendar根据当前(指定)日期取出指定时间 的相关文章

随机推荐

  • C++入门(一)----Visual C++ 6.0和Visual Studio 2019 的安装与使用

    Visual C 6 0的安装与使用 下载 安装 https blog csdn net weixin 41822392 article details 89519036 使用 https blog csdn net yiminghd286
  • 策略模式(Strategy)

    一 策略模式定义 定义一系列算法 把他们封装起来 并且他们可以相互替换 本模式使得算法可独立于使用他的客户而变化 二 策略模式结构说明 1 Strategy 策略接口 用来约束一系列具体的策略算法 Context使用这个接口来调用具体的策略
  • 开发人 学习资源

    非常优秀的资源 请珍惜 基础 游戏编程高级进阶书籍推荐 http www douban com doulist 522861 Amit游戏编程 http www cs students stanford edu amitp gameprog
  • Leetcode 刷题笔记(四) —— 数组类型解题方法四:模拟

    文章目录 系列文章目录 模拟 54 螺旋矩阵 59 螺旋矩阵 II 总结 系列文章目录 一 数组类型解题方法一 二分法 二 数组类型解题方法二 双指针法 三 数组类型解题方法三 滑动窗口 四 数组类型解题方法四 模拟 五 链表篇之链表的基础
  • pycharm中导入rospy包

    在pycharm中 问题描述 import rospy 显示有错误 在终端中import rospy 能通过 这种问题说明rospy已经安装成功 但是没有导入到pycharm中 解决办法 1 依次点击File gt settings gt
  • qt学习笔记11:QFile文件读写操作、QFileInfo文件信息提取

    QFile文件读写操作 需求 实现一个可以选择文件的对话框 在ui中 分别line edit push button 在widget中水平对齐 再整体和一个TextEdit对齐 界面上就得到一个大概的选取文件的窗口 点击选取文件窗口 左边会
  • PAT Basic 1008. 数组元素循环右移问题 (20)

    一个数组A中存有N N gt 0 个整数 在不允许使用另外数组的前提下 将每个整数循环向右移M M gt 0 个位置 即将A中的数据由 A0A1 AN 1 变换为 AN M AN 1 A0 A1 AN M 1 最后M个数循环移至最前面的M个
  • SLOT专业术语

    slot专业术语 要学习slot的知识首先要了解slot的一些专业术语 下面我们就列举一些slot的专业术语并给大家一一详细说明 现在大多数slot是三行五列的 我们就以三行五列 243lines的slot距离说明各种slot术语 上图出自
  • Wireshark网络抓包工具

    Wireshark工具 1 Wireshark软件简介 2 Wireshark下载 3 Wireshark安装 4 页面介绍 5 常用功能介绍 5 1 网络接口选择 5 2 抓包规则设定 5 3 查找目标数据包 5 4 快速选择过滤数据包
  • TP6的服务在自定义composer包中如何使用

    官方关于Service的说明文档 https www kancloud cn manual thinkphp6 0 1037490 做下概念说明 Service和Provider在TP6中扮演着不同的角色 Service是用于封装特定功能的
  • web 前端学习线路图

    web 前端学习线路图 一 HTML 教程 HTML教程 HTML简介 HTML编辑器 HTML基础 HTML元素 HTML属性 HTML标题 HTML段落 HTML样式 HTML格式化 HTML引用元素 HTML计算机代码元素 HTML注
  • 人工智能学习历程数学篇-概率论(1)

    人工智能学习历程数学篇 概率论 1 概率论基础 随机变量 概率论的一切定义的基础都来源于随机变量 那么何为随机变量呢 所谓的随机变量变量 X 并不代表一个具体的数字 而是一种概率分布 我们可以这样理解随机变量X 当你每次去看随机变量数据的具
  • java stringbuffer 赋值_Java常用类(String, StringBuffer, StringBuilder)

    一 String类 String的实例化方式 通过字面量定义的方式 String str hello world 通过new 构造器的方式 String str new String hello world 面试题 String s new
  • python读取excel某一区域单元格的内容

    sheet1 row values 0 6 10 取第1行 第6 10列 不含第10表 sheet1 col values 0 0 5 取第1列 第0 5行 不含第5行 sheet1 row slice 2 0 2 获取单元格值类型和内容
  • 【链表】循环链表知识点-内含代码基本操作及其说明

    目录 一 概念 二 循环链表基本操作 初始化 头插 插在最前面 尾插 查找数据 获取val的前驱 获得后继 删除数据 删除某位置的值 输出数据 判断plist是否为空链表 没有数据节点 获取plist长度 数据节点的个数 插入数据 获取pl
  • 最短路径算法 迪杰斯特拉、佛洛依德和贝尔曼

    最短路径算法 迪杰斯特拉算法 佛洛依德算法 迪杰斯特拉算法 迪杰斯特拉算法用来解决在有向有权图中某一个点到任意一点的最短路径问题 注意 只能用来解决权为非零的情况 不能够解决权为负数的情况 思想 我是一个搬运工 思想就不讲了 主要是代码 d
  • Vue基础入门---Vue-router

    简介 由于Vue在开发时对路由支持的不足 后来官方补充了vue router插件 它在Vue的生态环境中非常重要 在实际开发中只要编写一个页面就会操作vue router 要学习vue router就要先知道这里的路由是什么 这里的路由并不
  • vps用途

    VPS用途 1 虚拟主机空间 VPS主机非常适合为中小企业 小型门户网站 个人工作室 SOHO一族提供网站空间 较大独享资源 安全可靠的隔离保证了用户对于资源的使用和数据的安全 2 电子商务平台 VPS主机与独立服务器的运行完全相同 中小型
  • STL教程5-STL基本概念及String和vector使用

    活动地址 毕业季 进击的技术er 夏日炎炎 热浪中我们迎来毕业季 这是告别 也是迈向新起点的开始 CSDN诚邀各毕业生 在校生 职场人讲述自己的毕业季故事 分享自己的经验 技术er的进击之路 等你来书写 你可以选择适合自己的对应身份从以下相
  • Calendar根据当前(指定)日期取出指定时间

    以下为亲测 持续更新 一 Calendar根据当前 指定 日期取出本周一本周日和下周一下周日时间 根据Calendar java中定义的DAY OF WEEK来看 Field number for code get code and cod