网上搜到的要么不太符合要求, 还有的居然还要收费. 很无语.
这里整理了两种方法:
1. String.format
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SerialNumberGenerator {
private static int counter = 1;
public static String generateSerialNumber() {
LocalDate currentDate = LocalDate.now();
String dateString = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String serialNumber = dateString + String.format("%03d", counter);
counter++;
return serialNumber;
}
public static void main(String[] args) {
// 生成流水号
String serialNumber = generateSerialNumber();
System.out.println("Generated serial number: " + serialNumber);
}
}
2. redis的increment
private String generateTaskCode() {
String token = tryLock("lkd.task.code.", 1000 * 3);
String taskCode = "";
if (!StringUtils.isEmpty(token)) { // 抢到锁
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String date = dateFormat.format(new Date());
String key = "lkd.task.code." + date;
Object o = redisTemplate.opsForValue().get(key);
if (null == o) { // 当天没有生成第一个的code
String redisKey = key + String.format("%04d", 1);
redisTemplate.opsForValue().set(redisKey, 1L, Duration.ofDays(1));
return date + "0001";
}
taskCode = date + Strings.padStart(redisTemplate.opsForValue().increment(key, 1).toString(), 4, '0')
}
return taskCode;
}