• 主键生成20位,格式yyyyMMddHHmmssSSS+3位同毫秒内累计值


    package com.lifuyi.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    /**
     * 获取主键:返回17位时间戳+3位递增数(同一时间递增)
     */
    public class IdCreator {
        private static int addPart = 1;
        private static String result = "";
        private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        private static String lastDate = "";
        /**
         * 获取主键
         * @param length 长度
         * @return 返回17位时间戳+3位递增数
         */
        public synchronized static String getId(int length) {
            //获取时间部分字符串
            Date now = new Date();
            String nowStr = sdf.format(now);
    
            //获取数字后缀值部分
            if (IdCreator.lastDate.equals(nowStr)) {
                addPart += 1;
            } else {
                addPart = 1;
                lastDate = nowStr;
            }
    
            if (length > 17) {
                length -= 17;
                for (int i = 0; i < length - ((addPart + "").length()); i++) {
                    nowStr += "0";
                }
                nowStr += addPart;
                result = nowStr;
            } else {
                result = nowStr;
            }
    
            //20171127092455109003
    
            return result;
        }
    
        public static void main(String[] args) {
            System.out.println(IdCreator.getId(20));
        }
    }
    
    勿忘初心 得过且过
  • 相关阅读:
    ACM题集以及各种总结大全
    ACM题集以及各种总结大全
    线段树题集
    线段树题集
    POJ 1159 Palindrome【LCS+滚动数组】【水题】
    POJ 1159 Palindrome【LCS+滚动数组】【水题】
    开课博客
    第一周学习进度
    开学测试
    寒假总结
  • 原文地址:https://www.cnblogs.com/xpf1009/p/9227288.html
Copyright © 2020-2023  润新知