您的位置:首页 > 编程语言 > Java开发

Java生成不重复的数的方法(精确到毫秒级别)

2016-01-29 23:29 471 查看
在开发时要给某些表加上编号,而且编号是唯一的,自己用时间生成了下,觉得可能存在并发情况。所以在网上查了一下,就是随机生成。方法如下:

//方法一(用当前时间精确到毫秒,截取任意几位)
Date date = new Date();
SimpleDateFormatsdf = new SimpleDateFormat("yyyyMMddhhmmssSS");
String  formDate =sdf.format(date);
System.out.println(formDate);
String no = formDate.substring(10);
System.out.println(no);

//方法二(随机生成)
int[] array ={0,1,2,3,4,5,6,7,8,9};
Random rand = new Random();
for (int i = 10; i > 1; i--) {
int index =rand.nextInt(i);
int tmp =array[index];
array[index] = array[i - 1];
array[i - 1] = tmp;
}
int result = 0;
for(int i = 0; i < 6; i++)
result = result * 10 + array[i];
System.out.println(result);

//方法三:利用时间戳得到8位不重复的随机数
long nowDate = new Date().getTime();
String sid = Integer.toHexString((int)nowDate);
System.out.println(sid);
/*其中:java.lang.Integer.toHexString() 方法返回为无符号整数基数为16的整
*/参数的字符串表示形式。以下字符作为十六进制数字:0123456789ABCDEF。 }


备忘:YYYY-mm-dd HH:MM:SS部分解释

d               月中的某一天。一位数的日期没有前导零。
dd             月中的某一天。一位数的日期有一个前导零。
ddd           周中某天的缩写名称,在   AbbreviatedDayNames   中定义。
dddd         周中某天的完整名称,在   DayNames   中定义。
M               月份数字。一位数的月份没有前导零。
MM             月份数字。一位数的月份有一个前导零。
MMM           月份的缩写名称,在   AbbreviatedMonthNames   中定义。
MMMM         月份的完整名称,在   MonthNames   中定义。
y               不包含纪元的年份。不具有前导零。
yy             不包含纪元的年份。具有前导零。
yyyy         包括纪元的四位数的年份。
gg             时期或纪元。
h               12   小时制的小时。一位数的小时数没有前导零。
hh             12   小时制的小时。一位数的小时数有前导零。
H               24   小时制的小时。一位数的小时数没有前导零。
HH             24   小时制的小时。一位数的小时数有前导零。
m               分钟。一位数的分钟数没有前导零。
mm             分钟。一位数的分钟数有一个前导零。
s               秒。一位数的秒数没有前导零。
ss             秒。一位数的秒数有一个前导零。
f               秒的小数精度为一位。其余数字被截断。 如果时间为2013-05-20 14:02:30 yyyy-MM-dd HH:mm:ss  ;如果格式为yyyy-MM-dd hh:mm:ss 则显示为2013-05-20 02:02:30
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: