场景:
昨天项目上有个查询功能,需要展示编号一列(此编号是主键),考虑到使用UUID展示编号没有规律性,编号不太固定的话因此也不方便用户对编号模糊查询,所以这里没有用UUID生成编号展示。记录下使用日期+时间戳+随机数的方式生成编号
//模拟数据编号根据日期+时间+随机数的方式生成
//日期
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String currentDateStr = sdf.format(currentDate);
int ii = 0;
++ii;
//追加时间戳和随机数
StringBuffer simulatedDataNumber = new StringBuffer();
simulatedDataNumber.append(System.currentTimeMillis()).append(ii);
//拼接形成编号number
String number=currentDateStr+simulatedDataNumber.toString();
再看一下时间戳的创建,System.currentTimeMillis(),它是以毫秒为单位的,所以在同一毫秒内调用多次会返回相同的值,但是在下一毫秒就会返回不同的值。因此,理论上来说,System.currentTimeMillis() 返回的时间戳不会重复,当我的主键正好哈哈哈哈哈
示例生成的编号:前八位是日期,后面是时间戳和自增的i
2024031217102351610071
2024031217102351625941
2024031217102351641691