按照时间每天自动生成序列号的工具类

这是一个Java工具类,用于根据日期和自定义前缀每天自动创建序列号。序列号格式为:前缀+日期(yyyyMMdd)+001(自增)。类中使用了同步锁以确保线程安全,并通过HashMap缓存已创建的对象,提高效率。
摘要由CSDN通过智能技术生成

按照时间每天自动生成序列号的工具类

package utils;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class SerialUtil {
    private static final int MAX_VALUE = 99999999;

    private static final String FORMAT = "yyyyMMdd";

    private static final Format DF = new SimpleDateFormat(FORMAT);

    private static final byte[] lock = new byte[0];

    private String prefix = null;

    private Date date = null;

    private int number = 1;

    private static Map<String, SerialUtil> map = new HashMap<String, SerialUtil>();

    private SerialUtil(String prefix, Date date) {
        this.prefix = prefix;
        this.date = date;
    }

    public static SerialUtil newInstance(String prefix) {
        Date date = new Date();
        return newInstance(prefix, date);
    }

    public static SerialUtil newInstance(String prefix, Date date) {

        SerialUtil o = null;
        synchronized (lock) {

            String key = getKey(prefix, date);
            if (map.containsKey(key)) {
                o = map.get(key);
                int number = o.getNumber();
                if (number < MAX_VALUE) {
                    o.setNumber(number + 1);
                } else {
                    o.setNumber(1);
                }
            } else {

                o = new SerialUtil(prefix, date);
                map.put(key, o);
            }
        }
        return o;
    }

    public static String getKey(String prefix, Date date) {
        return prefix + format(date);
    }

    private static String format(Date date) {
        return DF.format(date);
    }

    public String toString() {
       // prefix = "";
        return prefix + format(date) + String.format("%03d", number);
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

可以根据当天日期和自定义前缀生成序列号。格式为自定义前缀+当天日期格式化数据+001(当天自增)
例如:CSQZ20200616001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值