java 日期加6位顺序序号,不足位补零

1.需求描述

      每天生产:  日期+6位顺序序号         日期格式yyyyMMdd

2.实现方式

1.不使用redis,  可考虑用static  静态实现(前提是当天服务不能重启,否则不起作用)

 

2.考虑数据库,并写一个存储函数,每次取值加一,java判断当天日期是否和数据库存储的日期是否为同一天,不同则初始化计数值

 

3.推荐方式   redis          可拓展至N位,只需要修改 String.format("%06d", i);中的数字

思路

1.redis 放一个日期key  ,然后放一个数字key  每次比较日期,日期不同则初始化,日期相同则取数加一并设置数字key

未考虑溢出情况若每天生超过6位,需要注意

喜欢的点个赞!

 

/**
     * 非分布式环境
     * @return
     */
    public synchronized String getSequence(){
        String date_incr = redisTemplate.opsForValue().get("date_incr");
        String num_incr = redisTemplate.opsForValue().get("num_incr");
        String yyyyMMdd = new SimpleDateFormat("yyyyMMdd").format(new Date());

        /**
         * 1.当redis的日期和现在不一样,则设置日期,计数器置为1,并在取数据时将加一的数据存于redis中
         * 2. 日期一样则将redis中的数据取出并加一
         */
        StringBuilder sb = new StringBuilder();
        if (StringUtils.isEmpty(date_incr)||!yyyyMMdd.equals(date_incr)){
            redisTemplate.opsForValue().set("date_incr",yyyyMMdd);
            redisTemplate.opsForValue().set("num_incr","1");
            String  data =  addOne("000000");
            StringBuilder append = sb.append(yyyyMMdd).append(data);
            return sb.toString();
        }else {
            String s = addOne(num_incr);
            sb.append(date_incr).append(s);
            return sb.toString();
        }
    }

     public  String  addOne(String data){
        int i = Integer.parseInt(data);
        i++;
         String format = String.format("%06d", i);
         redisTemplate.opsForValue().set("num_incr",format);
         return format;
    }

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值