Java生成流水号
2838 点击·0 回帖
![]() | ![]() | |
![]() | 上一个项目中,需要生成一个流水账号作为数据表主键,完成后,觉得还可以,不敢独享,遂贴出以供拍砖。 流水号格式为yyyyMMddXXXX,规定每天只能到9999,代码如下: 01 import java.text.DecimalFormat; 02 import java.text.SimpleDateFormat; 03 import java.util.Date; 04 05 public class PrimaryGenerater { 06 07 private static final String SERIAL_NUMBER = "XXXX"; // 流水号格式 08 private static PrimaryGenerater primaryGenerater = null; 09 10 private PrimaryGenerater() { 11 } 12 13 /** 14 * 取得PrimaryGenerater的单例实现 15 * 16 * @return 17 */ 18 public static PrimaryGenerater getInstance() { 19 if (primaryGenerater == null) { 20 synchronized (PrimaryGenerater.class) { 21 if (primaryGenerater == null) { 22 primaryGenerater = new PrimaryGenerater(); 23 } 24 } 25 } 26 return primaryGenerater; 27 } 28 29 /** 30 * 生成下一个编号 31 */ 32 public synchronized String geneterNextNumber(String sno) { 33 String id = null; 34 Date date = new Date(); 35 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 36 if (sno == null) { 37 id = formatter.format(date) + "0001"; 38 } else { 39 int count = SERIAL_NUMBER.length(); 40 StringBuilder sb = new StringBuilder(); 41 for (int i = 0; i < count; i++) { 42 sb.append("0"); 43 } 44 DecimalFormat df = new DecimalFormat("0000"); 45 id = formatter.format(date) 46 + df.format(1 + Integer.parseInt(sno.substring(8, 12))); 47 } 48 return id; 49 } 50 } | |
![]() | ![]() |