Date オブジェクトの紀元前の年をマイナスで表示する


java.util.Datejava.text.SimpleDateFormat でフォーマットするときに yyyy の様にすると紀元前でも符号は付きません。

Date date = new Date(Long.MIN_VALUE);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
String year = formatter.format(date);  // 292269055

紀元前を負符号で表示したい場合は java.text.DateFormatSymbols のインスタンスに setEras メソッドを使用します。紀元の符号の表示は G で指定します。

Date date = new Date(Long.MIN_VALUE);
DateFormatSymbols symbols = new DateFormatSymbols();
symbols.setEras(new String[] { "-", "" });
DateFormat formatter = new SimpleDateFormat("Gyyyy", symbols);
String year = formatter.format(date);  // -292269055