Java中LocalDateTime使用示例-根据日期生成当日累计班次序号名称

场景

Java实体中时间属性用Date和LocalDateTime的区别、格式化示例、灵活时间解析器构建示例:

https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/151789444

下面记录使用LocalDateTime实现当日内班次名称累计序号生成的简单示例。

如果当天没有业务数据,则生成诸如“2025/11/05-1”的编号数据。

如果当前已经有1条数据,则生成"2025/11/05-2"的编号。

以此类推。

在不考虑大数量以及并发、加锁等特殊操作情况下,只做简单的编号生成。

注:

博客:
https://blog.youkuaiyun.com/badao_liumang_qizhi 

实现

1、首先查询当天内符合条件的数据

        List<ShiftFinishManagement> list = this.lambdaQuery()
                .ge(ShiftFinishManagement::getShiftStartTime,
                        shiftFinishDTO.getShiftEndTime().truncatedTo(ChronoUnit.DAYS))
                .lt(ShiftFinishManagement::getShiftStartTime,
                        shiftFinishDTO.getShiftEndTime().truncatedTo(ChronoUnit.DAYS).plusDays(1))
                .eq(ShiftFinishManagement::getStoreId, shiftFinishDTO.getStoreId())
                .orderByAsc(ShiftFinishManagement::getShiftStartTime)
                .list();

2、传递查询结果调用生成编号的方法

String generateShiftName = generateShiftName(shiftFinishDTO, list);

方法实现

    private String generateShiftName(ShiftFinishDTO shiftFinishDTO,List<ShiftFinishManagement> dailyShifts){
        // 1. 获取基准日期(当日00:00)
        LocalDate baseDate = shiftFinishDTO.getShiftEndTime().toLocalDate();

        int sequence = dailyShifts.size()+1;

        return baseDate.format(DATE_FORMATTER)  + "-" + sequence;
    }

这里格式化使用常量声明

    private static final DateTimeFormatter DATE_FORMATTER =
            DateTimeFormatter.ofPattern("yyyy/MM/dd");

其中toLocalDate用来获取日期字段,然后调用format方法进行格式化数据。

序号通过已存在的数据的序号加1实现。

3、如果是生成当天第一条数据,需要修改如下

    private String generateFirstShiftName(){
        // 1. 获取基准日期(当日00:00)
        LocalDate baseDate = LocalDateTime.now().toLocalDate();

        int sequence = 1;

        return baseDate.format(DATE_FORMATTER)  + "-" + sequence;
    }

或者结合上面的方法进行判断和兼容语法,修改成同一个方法。

private String generateShiftName(ShiftFinishDTO shiftFinishDTO, List<ShiftFinishManagement> dailyShifts) {
    // 获取基准日期
    LocalDate baseDate = (shiftFinishDTO != null)
        ? shiftFinishDTO.getShiftEndTime().toLocalDate() 
        : LocalDateTime.now().toLocalDate();
   
    // 确定序号
    int sequence = (dailyShifts != null)
        ? dailyShifts.size()  + 1
        : 1;
   
    return baseDate.format(DATE_FORMATTER)  + "-" + sequence;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值