因为生成订单ID、商品ID 或者什么什么ID的,不想用自增,又怕反复,于是就用 年与日时分秒 + 6位自增码 (共计20位长度)来当作ID
注意:假设你的ID是Long型。就要注意,Long的最大长度为19位,假设直接转的话会有问题,建议改为年月日时分秒+5位随机数
详细代码:
private static int sequence = 0; private static int length = 6; /** * YYYYMMDDHHMMSS+6位自增长码(20位) * @author shijing * 2015年6月29日下午1:25:23 * @return */ public static synchronized String getLocalTrmSeqNum() { sequence = sequence >= 999999 ? 1 : sequence + 1; String datetime = new SimpleDateFormat("yyyyMMddHHmmss") .format(new Date()); String s = Integer.toString(sequence); return datetime +addLeftZero(s, length); } /** * 左填0 * @author shijing * 2015年6月29日下午1:24:32 * @param s * @param length * @return */ public static String addLeftZero(String s, int length) { // StringBuilder sb=new StringBuilder(); int old = s.length(); if (length > old) { char[] c = new char[length]; char[] x = s.toCharArray(); if (x.length > length) { throw new IllegalArgumentException( "Numeric value is larger than intended length: " + s + " LEN " + length); } int lim = c.length - x.length; for (int i = 0; i < lim; i++) { c[i] = '0'; } System.arraycopy(x, 0, c, lim, x.length); return new String(c); } return s.substring(0, length); }
以下是測试的结果:
2015070816503700001