欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中获取日期以及由时间生成唯一主键

程序员文章站 2022-05-18 17:29:27
...
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

public class TimeUtil {
    /**
     * 获取当前时间的时间戳
     * @return
     * */
    public static String getTimeInMillis() {
        long timeInMillis = Calendar.getInstance().getTimeInMillis();
        return timeInMillis+"";
    }
    /**
     * 获取位数为7位的随机数
     * @return
     * */
    public static String getRandom() {
        Random random = new Random();
        int nextInt = random.nextInt(9000000);
        nextInt=nextInt+1000000;
        String str=nextInt+"";
        return str;
    }
    public static String getTimeYearMonthDay() {
        Calendar c = Calendar.getInstance();
        int year=c.get(Calendar.YEAR);
        int month=c.get(Calendar.MONTH)+1;
        int day=c.get(Calendar.DAY_OF_MONTH);
        int hh=c.get(Calendar.HOUR_OF_DAY);
        int mi=c.get(Calendar.MINUTE);
        int ss=c.get(Calendar.SECOND);
        System.out.println(year+" "+month+" "+day+" "+hh+" "+mi+" "+ss);
        return null;
    }
    /**
     * 输入日期格式,返回格式内的内容,输入格式以-分隔
     * @param dateFormat
     * @return
     **/
    public static String getTimeYearMonthDay(String dateFormat) {
        String[] strNow = new SimpleDateFormat(dateFormat).format(new Date()).toString().split("-");
        String str="";
        for (String string : strNow) {
            str=str+string;
        }
        return str;
    }
    /**
     * 获得20位的主键值,主键值的格式是13位的当前时间戳加7位的随机数
     * @return
     **/
    public static String getMillPrimaryKey() {
        return getTimeInMillis()+getRandom();
    }

    /**
     * 获得21位的主键值,主键值的格式是14位的当前时间加7位的随机数
     * @return
     **/
    public static String getDatePrimaryKey() {
        return getTimeYearMonthDay("yyyyMMddHHmmss")+getRandom();
    }

    public static void main(String[] args) {
        System.out.println(getTimeYearMonthDay("yyyyMMddHHmmss"));
        getTimeYearMonthDay();
        System.out.println(getTimeInMillis());
        System.out.println(getRandom());
        System.out.println(getMillPrimaryKey());
        System.out.println(getDatePrimaryKey());
    }
}

       编译并执行程序,运行结果如下所示:

20181102160254
2018 11 2 16 2 54
1541145774734
3462164
15411457747353009476
201811021602548894323

进程完成,退出码 0

       使用随机数作为主键的一部分,也会有弊端,因为有可能生成两个相同的随机数,虽然这种可能性很低,但如果在密集时间内生成大量的数,则这些数字的重复度会增加。同时,我在思考如何保证在一天时间内生成唯一的7位随机数字,这样组合成的主键(日期时间+7位随机数)是唯一的。欢迎留言评论!