Java获取保证唯一的递增的序列号字符串
2017-04-25 13:21
621 查看
Java
原文地址:https://www.oschina.net/code/snippet_435679_10193
/** * @return 形如 yyyyMMddHHmmssSSS-Z0000019558195832297 的(38位)保证唯一的递增的序列号字符串, * 主要用于数据库的主键,方便基于时间点的跨数据库的异步数据同步。 * 前半部分是currentTimeMillis,后半部分是nanoTime(正数)补齐20位的字符串, * 如果通过System.nanoTime()获取的是负数,则通过nanoTime = nanoTime+Long.MAX_VALUE+1; * 转化为正数或零。 */ public static String getTimeMillisSequence(){ long nanoTime = System.nanoTime(); String preFix=""; if (nanoTime<0){ preFix="A";//负数补位A保证负数排在正数Z前面,解决正负临界值(如A9223372036854775807至Z0000000000000000000)问题。 nanoTime = nanoTime+Long.MAX_VALUE+1; }else{ preFix="Z"; } String nanoTimeStr = String.valueOf(nanoTime); int difBit=String.valueOf(Long.MAX_VALUE).length()-nanoTimeStr.length(); for (int i=0;i<difBit;i++){ preFix = preFix+"0"; } nanoTimeStr = preFix+nanoTimeStr; SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmssSSS"); //24小时制 String timeMillisSequence=sdf.format(System.currentTimeMillis())+"-"+nanoTimeStr; return timeMillisSequence; }
原文地址:https://www.oschina.net/code/snippet_435679_10193
相关文章推荐
- java保证唯一的递增的序列号字符串
- JAVA多线程下,获取递增的序列号
- Java 获取指定字符串出现的次数
- Java 中正确获取中文字符串长度
- java获取当前日期的前一天日期与字符串日期之间的转换
- java中用正则表达式获取一个指定的子字符在字符串中出现的指定次数的下标索引,并且进行字符串分割
- 使用Atomic特性获取毫秒时间内的有规律递增唯一流水号
- java如何获取字符串的字节数
- java notify和notifyAll的区别 首先从名字可以了解,notify是通知一个线程获取锁,notifyAll是通知所有相关的线程去竞争锁。 notify不能保证获得锁的线程,真正需要锁
- java字符串获取方法及作业题
- 如何获取Android唯一标识(唯一序列号)
- java 生成 序列号 随机字符串等
- Java中获取汉字字符串编码格式的一种可行方式
- Java以逗号分隔而组成的两个字符串,获取相同元素的字符串
- java获取字符串格式日期向前或向后n天的日期
- Java 获取指定字符串出现的次数
- Java 获取字符串中的IP地址正则
- 如何获取Android唯一标识(唯一序列号)
- java获取昨天日期字符串的方法
- Java利用MessageDigest获取字符串或文件MD5详解