シリアルナンバー的な何かを返す静的クラスを作ってみた

import java.util.Calendar;

public class Selial {
  private static int num;
  private static String day = "";
  private Selial() {}

  synchronized private static String getDay() {
    Calendar d = Calendar.getInstance();
    StringBuilder sb = new StringBuilder(8);
    sb.append(d.get(Calendar.YEAR));
    sb.append(String.format("%02d",d.get(Calendar.MONTH)+1));
    sb.append(String.format("%02d",d.get(Calendar.DATE)));
    return sb.toString();
  }

  synchronized public static String getNum() {
    StringBuilder sb = new StringBuilder(13);
    String tmp_day = getDay();
    if (!day.equals(tmp_day)) {
      day = tmp_day;
      num = 0;
    }
    sb.append(day);
    sb.append(String.format("%05d",num++));
    return sb.toString();
  }

}


実行してみる。

public class Main {
  public static void main(String[] args) {
    System.out.println(Selial.getNum());
    System.out.println(Selial.getNum());
    System.out.println(Selial.getNum());
  }
}


実行結果

$ java Main
2009032600000
2009032600001
2009032600002


マルチスレッド対応。
なんかぁ、無駄がありそうで怖いけど、晒してみる。