java判断俩个时间之间差的小时数,分钟数,秒数_未有lp的博客-程序员ITS203_判断两个时间类型间隔时间 小时

技术标签: java  

java判断俩个时间之间差的小时数,分钟数,秒数

给出任意两个时间, 计算出该时间段内白天小时数, 夜晚小时数, 以及白天次数夜晚次数,
白天时间段为 7:00-21:00;

@Slf4j
public class DateTest {
    

    //    给出任意两个时间, 计算出该时间段内白天小时数, 夜晚小时数, 以及白天次数夜晚次数,
    // 白天为 7:00-21:00;  白 14    夜 10

    /**
     * 先计算俩个时间之间的差多少天,在计算中间差多少个小时
     * 开始      结束
     * 正         正(正常的都包括7点和21点俩个时间点)
     * 不         正 (小于7 或大于21)
     * 不         不(都小于7 或都大于21)
     * 正         不 (小于7 或大于21)
     * 不         不 (都不正常)  6   23   或  23   6
     */

    public static void main(String[] args) throws Exception {
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date beginDate = sdf.parse("2020-6-20 20:59:00");
        Date endDate = sdf.parse("2020-6-20 22:59:00");
        System.out.println(sdf.format(beginDate));
        System.out.println(sdf.format(endDate));
        testDate(beginDate, endDate);
    }

    private static void testDate(Date beginDate, Date endDate) throws Exception {
    
        if (beginDate.getTime() > endDate.getTime() || beginDate.equals(endDate)) {
    
            log.info("结束时间必须比开始时间早");
            return;
        }
        int w = 14, b = 10;//w 白天总小时数  b 黑夜小时数
        int whour = 0;//白天小时数
        int bhour = 0;//夜晚小时数
        int wcs = 0;//白天次数
        int bcs = 0;//夜晚次数
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long bl = 10000;//小时计算变量
        long beginDateTime = beginDate.getTime();
        long endDateTime = endDate.getTime();
        //相隔天数的总毫秒数
        long diff = endDateTime - beginDateTime;
        long day = diff / nd;// 计算差多少天
        long hour = diff % nd / nh + day * 24;// 计算差多少小时
        //先计算整天的的数量
        if (day > 0) {
    
            whour += w * day;
            bhour += b * day;
            wcs += day;
            bcs += day;
        }
        //算出整天的小时数和总小时数不相等,说明有多余的小时数
        if (day * 24 != hour) {
    
            SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");
            long date1Time = Long.parseLong(sdf1.format(beginDate).replace(":", ""));
            long date2Time = Long.parseLong(sdf1.format(endDate).replace(":", ""));
            long wb = 70000;//07:00:00 白天开始时间
            long we = 210000;//21:00:00 白天结束时间
            long zero = 240000;//24:00:00 0点分界值

            //1.开始正常  结束正常
            if (date1Time >= wb && date1Time <= we
                    && date2Time >= wb && date2Time <= we) {
    
                if (date2Time > date1Time) {
    //结束>开始
                    //13 14  相当于 多了俩个时间差
                    whour += (date2Time - date1Time) / bl;
                    wcs += 1;

                } else if (date2Time < date1Time) {
    
                    // 14  13    差俩个差够一天,所以先算白天的 :当前
                    whour += ((we - date1Time) / bl) + ((date2Time - wb) / bl);
                    bhour += b;
                    //开始小于等于21 并且结束大于7点说明有白天时间段
                    if (date1Time <= we && date2Time > wb) {
    
                        wcs += 1;
                    }
                    bcs += 1;
                }
            }


            //2.开始不正常  结束正常
            if (date2Time >= wb && date2Time <= we) {
    
                if (date1Time > we || date1Time < wb) {
    
                    if (date1Time > we) {
     //开始 > 21
                        //21  13
                        //先计算今天的黑夜再加上7个小时
                        long l = zero - date1Time;
                        long hou = l / bl;
                        bhour += hou + 7;
                        bcs += 1;
                    } else if (date1Time < wb) {
    
                        //5
                        // 先算离白天7点的黑夜小时
                        bhour += (wb - date1Time) / bl;
                        bcs += 1;
                    }
                    //结束正常,算超出的小时数
                    whour += (date2Time - wb) / bl>1?(date2Time - wb) / bl:1;
                    //判断当天开始时间超过白天段再让加一
                    if (date1Time < we && date1Time >= wb && date2Time <= zero
                            //开始小于21,并且结束大于7小于21说明有白天时间段
                            || date1Time < we && date2Time < zero && date2Time > wb) {
    

                        wcs += 1;

                    }
                }
            }

            //3.开始不正常  结束不正常  都小于7  都大于21
            if (date1Time < wb && date2Time < wb ||
                    date1Time > we && date2Time > we) {
    
                if (date2Time > date1Time) {
     //结束 >开始
                    //4  3
                    //23 22
                    //相当于一天多了俩个时间的差的小时,并且是黑夜
                    bhour += (date2Time - date1Time) / bl;
                    bcs += 1;
                } else if (date2Time < date1Time) {
     // 结束  <开始
                    //6  4
                    //先计算 离7点的黑夜数
                    bhour += (wb - date1Time) / bl + date2Time / bl + 3;
                    //差俩个时间差为一整天,所以白天都有
                    whour += w;
                    wcs += 1;
                    bcs += 1;
                }
            }

            //4.开始正常  结束不正常  小于7  大于21
            if (date1Time >= wb && date1Time <= we) {
    
                if (date2Time < wb || date2Time > we) {
    
                    if (date2Time < wb) {
     //结束 < 7
                        //14   6
                        //先结算正常白天的小时数,黑夜=加上到24的3个小时+结束的黑夜小时数
                        bhour += 3 + date2Time / bl;
                        bcs += 1;
                    } else if (date2Time > we) {
    //结束 >21
                        //14  22
                        //他大于21 进入黑夜  黑夜数等于超出的小时数
                        bhour += (date2Time - we) / bl;
                        bcs += 1;
                    }
                    whour += (we - date1Time) / bl>1?(we - date1Time) / bl:1;
                    //判断当天开始时间超过白天段再让加一
                    if (date1Time < we && date1Time >= wb && date2Time <= zero
                            //只有开始小于21才有白天段
                            || date1Time < we && date2Time < zero && date2Time > wb) {
    
                        wcs += 1;
                    }

                }
            }


            //5.开始不正常  结束不正常
            if (date1Time < wb && date2Time > we
                    || date1Time > we && date2Time < wb) {
    
                if (date1Time < wb && date2Time > we) {
     // 6    23
                    //先计算黑夜,到7点的黑夜+结束超出的小时数
                    bhour += (wb - date1Time) / bl + (date2Time - we) / bl;
                    whour += w;
                    wcs += 1;
                    bcs += 1;
                }
                if (date1Time > we && date2Time < wb) {
    // 23   6
                    //先结算今天到凌晨的黑夜数+明天的黑夜数
                    bhour += (zero - date1Time) / bl + date2Time / bl;
                    bcs += 1;
                }
            }
            //判断分钟是否是00,当前是不是整点,多一秒就按一个小时算
            if (date1Time % bl != 0) {
    
                whour += 1;
                hour+=1;
            }
            if (date2Time % bl != 0) {
    
                bhour += 1;
                hour+=1;

            }
        }
        System.out.println("总天数:" + day);
        System.out.println("总小时数:" + hour + "\n");
        System.out.println("白天小时数:" + whour);
        System.out.println("黑夜小时数:" + bhour + "\n");
        System.out.println("白天次数:" + wcs);
        System.out.println("夜晚次数:" + bcs);
    }


}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42283352/article/details/106855345

智能推荐

中文文本预处理_SK-Berry的博客-程序员ITS203_中文文本预处理

 在进行文本分析时,我们一大半的时间都会花在文本预处理上,而中文和英文的预处理流程稍有不同,本文就中文文本的预处理做一个总结。文章目录1、文本数据准备2、去除指定无用的符号3、让文本只保留汉字4、文本中的表情符号去除5、繁体中文与简体中文转换1、文本数据准备 使用已经有的语料库,按照Python读取文本内容的方法读取文本文件内容。此处为了一步步演示过程,所以先使用句子,最后再整合。2、去除...

计算机基本办公软件应用技能有哪些,办公人员应掌握哪些办公软件技能_Fay li的博客-程序员ITS203

原标题:办公人员应掌握哪些办公软件技能一、行业前景:随着电脑的普及与发展,办公自动化‌‌已经渗入到各行各业。熟练地使用办公软件已经成为对各行各业从业人员使用电脑的基本要求,而掌握一种功能强大的办公软件则能帮助你更好地处理各种复杂的办公文档。二、课程简介:品文教育通过商务办公软件学习,让学员掌握电脑基础知识和日常电脑软件维护知识,并熟练使用办公自动化的Word/ Excel/ PowerPoint等...

自然语言处理实战:新闻文本分类(附代码)_南有芙蕖的博客-程序员ITS203_新闻文本分类

自然语言处理实战:新闻文本分类——本文比赛来源于天池零基础入门NLP - 新闻文本分类。目录自然语言处理实战:新闻文本分类一、赛题理解1、学习目标2、赛题数据3、数据标签4、评测指标5、数据读取6、解题思路二、数据读取与数据分析1、学习目标2、数据读取3、数据分析3.1句子长度分析3.2新闻类别分布3.3字符分布统计4、数据分析的结论5、本章小结三、基于机器学习的文本分类1、学习目标2、机器学习模型3、文本表示方法 Part13.1One-hot3.2Bag of Words3.3N-gram3.4

常用数据结构介绍_BigWatermelon11的博客-程序员ITS203_常见的数据结构

常用的数据结构介绍0.数组:顺序存储,随机访问  链表:链表存储,顺序访问1.栈2.队列3.串4.树1)二叉树2)遍历二叉树:前序(先中间,再左边,后右边)中序(先左边,再中间,后右边)后序(先左边,再右边,后中间)3)线索二叉树:用二插链表实现的二叉树,将那些没有使用的左右指针指向前驱和后继(前驱和后继就是遍历后(例如用中序遍历)

Linux文件系统的注册、安装与拆卸_转身即天涯_的博客-程序员ITS203

8.4.1 文件系统的注册当内核被编译时,就已经确定了可以支持哪些文件系统,这些文件系统在系统引导时,在 VFS 中进行注册。如果文件系统是作为内核可装载的模块,则在实际安装时进行注册,并在模块卸载时注销。每个文件系统都有一个初始化例程,它的作用就是在 VFS 中进行注册,即填写一个叫做 file_system_type的数据结构,该结构包含了文件系统的名称以及一个指向对应的 VFS 超级块...

linux xfce4桌面 仿mac os美化_whatday的博客-程序员ITS203_xfce4美化

系统:Xubuntu 18.04Xubuntu 美化之后的样子一、安装xfce4的主题和图标下载主题,图标样式:http://xfce-look.org/将下载的主题,移动到桌面主题目录:/usr/share/themes将下载的图标,移动到图标主题目录,/usr/share/icons分别在各自目录解压缩主题文件二、设置xfce4的主题在设置中,打开外观选...

随便推点

百度全景地图应用_weixin_34252686的博客-程序员ITS203

首先引用百度地图API(KEY自己去注册,注册地址http://developer.baidu.com/map/)&lt;script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&amp;ak=KEY"&gt;&lt;/script&gt; 页面&lt;div id="come" style="...

Ant Design踩坑(一)Form自定义校验多次发送请求的问题_supelee9527的博客-程序员ITS203_validatetrigger

Ant Design表单组件的基本用法这里不做具体阐述,如果要看基本用法请移步:https://ant.design/components/form-cn/Form表单实现自定义校验代码如下: checkName = (rule, value, callback) => { const name = value; if (name) { if

沙窝萝卜_weixin_33961829的博客-程序员ITS203

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

FTP协议详细解析_李大坝超欧的的博客-程序员ITS203_ftp协议格式分析

FTP的工作原理FTP(File Transfer Protocol)协议,文件传输协议。提供交互式的访问,对传输文件的格式和类型有分类,允许文件具有存取权限。适合异构网络任意计算机的传送。FTP有以下基本功能:1.提供不同种类主机系统(硬,软件体系等都可以不同)之间的文件传输能力。2.以用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力。3.以匿名FTP的方式提供公用文件共享...

AS2的实际应用_黎志文的博客-程序员ITS203

由于客户的需要,项目中需要使用AS2协议与客户进行系统连接,因此对AS2的协议进行研究和学习。AS2的协议是支持B2B的贸易伙伴间进行EDI数据交换的协议。以下是学习的笔记。  术语(涉及的名词)  MIME简介 AS2消息 AS2消息传送 (HTTP)AS2-MDN消息 项目简介 与应用实例   术语    1)AS2    :Applicab

项目管理相关书籍读书笔记_浅笑黄花伊人泪的博客-程序员ITS203

人月神话一般很老的书,主要围绕作者在一个操作系统的项目过程展开,其开发模式和今天互联网的开发模式大不一样,他们当时的项目可能会有上千人参与,耗时几年,所以需要严格的项目流程,比如先由10人组成的架构组,对所有功能进行严格的规格制定和架构设计,再交付给开发实现人员去实现。不过这也挺有意思的,至少有对比,知道老一辈的程序员所经历的项目管理是怎样的,他们的项目管理经验是什么。按着书中的主线记录下重要的几个点:1:估算,软件工程不像土木工程,可以通过增加人手来换取时间进度。但往往有点项目,.

推荐文章

热门文章

相关标签