后端开发笔记20240106

文章目录

写在前面

出来创业也一年多了,感觉这一年,后端的开发荒废了很多,都快不如专注做后端开发两三年的学弟学妹们了,逼着自己开了这个专栏,让自己坚持把每天开发的收获写一写。

时间相关的减法操作

两个date日期相减获得时间差

复制代码
    public static String timeDistance(Date endDate, Date startTime)
    {
        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - startTime.getTime();
        // 计算差多少天
        long day = diff / nd;
        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        long min = diff % nd % nh / nm;
        // 计算差多少秒//输出结果
        // long sec = diff % nd % nh % nm / ns;
        return day + "天" + hour + "小时" + min + "分钟";
    }

思路就是获得2个日期的毫秒差异,然后对每天的毫秒数目做除法,获得天的差距。如果对天取摩,就是相差多少小时的毫秒数,再对小时的毫秒做除法,就是相差多少小时。以此类推。就可以得到差距多少分,多少秒。然后把前面的天小时,分钟,秒 联合起来,就是2个时间的差距的字符串。

lacaltime和date做差

复制代码
    public long getMinutesDifference(Date date, LocalTime localTime) {
        // 将Date对象转换为LocalTime
        LocalTime dateLocalTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
        // 计算时间差
        Duration duration = Duration.between(localTime, dateLocalTime);
        // 返回分钟差的绝对值
        return duration.toMinutes();
    }

这个案例是在考勤项目中遇到的,考勤时间是上午八点到下午20点,每天都如此,于是就用LocalTime记录的考勤规则。然后每天的实际打卡时间记录的是date,将这两个类型的数做减法,得到相差的分钟数目,根据正负,就可以得到是否迟到或者早退的情况。测试代码,如下。上面的这个函数,跟正常人的理解是一致的,如果前面的date是一个较晚的时间,返回的是正数,否则返回的是负数。一般LocalTime是考勤规则,Date是实际的打卡时间,做差,根据实际的业务去判断是否迟到早退。

复制代码
    public static void main(String[] args) {
// 示例用法
        Date date = new Date();
        LocalTime localTime = LocalTime.of(20, 10);
        long minutesDiff = getMinutesDifference(date, localTime);
        System.out.println("分钟差值: " + minutesDiff);
    }

sql语句,select子句当作where查询的条件

复制代码
    <!--  根据上班时间  查询上下班的考勤规则   2h -->
    <select id="selectRuleByTimeAndStaffId" resultMap="AttendanceStaffScheduleItemResult">
        select *
        from attendance_staff_schedule_item
        where schedule_id IN (
            select schedule_id
            from attendance_staff_schedule_item
            where staff_id = #{staffId}
            and attendance_time >= DATE_SUB(#{arriveTime},INTERVAL 2 HOUR)
            and attendance_time <= DATE_SUB(#{arriveTime},INTERVAL -2 HOUR)
            and access_type = 0
        )
    </select>

这个sql将select查询的结果当作子句,传入where中作为条件。不用写多个sql语句来实现这个功能了。主要记录的就是select语句也可以配合in当作where条件中的参数。

DATE_SUB()是一个MySQL函数,用于从指定的日期或时间中减去一定的时间间隔。传入的数据如果是正数,就是增加。

相关推荐
todoitbo几秒前
时序数据库选型指南:从大数据场景出发
大数据·数据库·时序数据库
芯盾时代2 分钟前
政务行业面临的网络风险
网络·数据库·网络安全
一只小阿乐3 分钟前
react 中的Zustand的store使用
前端·javascript·react.js·zustand
我命由我123454 分钟前
Vue3 开发中,字符串中的 <br\> 标签被直接当作文本显示出来了,而不是被解析为 HTML 换行标签
开发语言·前端·javascript·vue.js·html·ecmascript·html5
fire-flyer6 分钟前
第 3 篇:ClickHouse 表结构设计的核心原则
大数据·数据库·clickhouse
FinTech老王6 分钟前
时序数据库存储引擎解密:LSM-Tree vs B-Tree vs 倒排索引,谁最适合时序场景?
数据库·时序数据库·lsm-tree
阿坤带你走近大数据7 分钟前
存储过程在 oracle数据库管理工具里定时自动化运行方案
数据库·oracle·自动化
熬夜的咕噜猫11 分钟前
数据库常用SQL命令
数据库·oracle
William Dawson13 分钟前
【实战分享】DTU设备高并发数据接入全流程(Redis + RabbitMQ + 数据库)
数据库·redis·rabbitmq
wregjru14 分钟前
【MySQL】5. 数据更新与查询详解
java·数据库·mysql