/**
* Calendar convert
*
*
* */
private Calendar getCalendar(String strDate){
Calendar sysCal = null;
if(strDate==null || strDate.length()<10)
return sysCal;
else{
int intYear = Integer.parseInt(strDate.substring(0,4));
int intMonth = Integer.parseInt(strDate.substring(5,6))-1;
int intDay = Integer.parseInt(strDate.substring(8,9));
sysCal = new GregorianCalendar(intYear,intMonth,intDay);
}
return sysCal;
}
/** 元号パターンのタイプ */
private static final int FULL = 0; //* 完全 */
/** 元号パターンのタイプ */
private static final int SHORT = 1; //* 頭1文字 */
/** 元号パターンのタイプ */
private static final int INISIAL_HAN = 2; //* 半角英頭文字 */
/** 元号パターンのタイプ */
private static final int INISIAL_ZEN = 3; //* 全角英頭文字 */
/** 和暦変換用日付配列 */
private static final int FIRST_DATE = 0; //* 初年月日 */
/** 和暦変換用日付配列 */
private static final int LAST_DATE = 1; //* 終年月日 */
/** 和暦変換用日付配列 */
private static final int FIRST_YEAR = 2; //* 初年 */
/** 元号パターン */
private static final String[][] GENGOU = { { "明治", "明", "M", "M" }, {
"大正", "大", "T", "T" }, {
"昭和", "昭", "S", "S" }, {
"平成", "平", "H", "H" }
};
private static final int[][] WAREKIYMD = { { 18730101, 19120729, 1873 }, //* 新暦→明治 */
{
19120730, 19261224, 1912 }, //* 大正 */
{
19261225, 19890107, 1926 }, //* 昭和 */
{
19890108, 99999999, 1989 } //* 平成 */
};
/**
* 和暦変換。<BR>
* @param inCal Calendar 日時データ
* @param pattern String フォーマットパターン
* @return String 指定のパターンでフォーマットした日時データ。
* サポート外のパターンの時はデフォルトフォーマットされたものを返す。
*/
private static String getWarekiFormat(Calendar inCal, String pattern) {
/* 元号パターン参照 */
int waGengou = -1;
/* 和暦年 */
int waYear = 0;
/* 月設定(月データは0~11で保持しているため+1) */
int waMonth = inCal.get(Calendar.MONTH) + 1;
/* 日設定 */
int waDay = inCal.get(Calendar.DAY_OF_MONTH);
/* 戻り値 */
String rtnDate = "";
Date defDate = inCal.getTime();
for (int h = 0; h < WAREKIYMD.length; h++) {
if ((WAREKIYMD[h][FIRST_DATE] <= intYYYYMMDD) && (intYYYYMMDD <= WAREKIYMD[h][LAST_DATE])) {
waGengou = h;
waYear = inCal.get(Calendar.YEAR) - WAREKIYMD[h][FIRST_YEAR] + 1;
break;
}
}
if (-1 == waGengou) {
waYear = inCal.get(Calendar.YEAR);
}
/* パターン1 */
if (-1 != waGengou) {
rtnDate = GENGOU[waGengou][FULL];
/* 元年に対応 修正青木 */
if (waYear == 1) {
rtnDate += outputGannen(waYear);
} else if (9 >= waYear) {
/* 2~9年の場合 */
rtnDate += "0" + Integer.toString(waYear) + "年";
} else {
/* 10年~の場合 */
rtnDate += Integer.toString(waYear) + "年";
}
} else if (1000 <= waYear) {
rtnDate += Integer.toString(waYear) + "年";
} else if (100 <= waYear) {
rtnDate += "0" + Integer.toString(waYear) + "年";
} else if (10 <= waYear) {
rtnDate += "00" + Integer.toString(waYear) + "年";
} else if (0 <= waYear) {
rtnDate += "000" + Integer.toString(waYear) + "年";
} else {
rtnDate += Integer.toString(waYear) + "年";
}
/* 1~9月の場合 */
rtnDate += "0" + Integer.toString(waMonth) + "月";
} else {
/* 10~12月の場合 */
rtnDate += Integer.toString(waMonth) + "月";
}
/* 1~9日の場合 */
rtnDate += "0" + Integer.toString(waDay) + "日";
} else {
/* 10~31日の場合 */
rtnDate += Integer.toString(waDay) + "日";
}
/* パターン2 */
if (-1 != waGengou) {
rtnDate = GENGOU[waGengou][FULL];
}
/* 元年に対応 修正青木 */
if (waYear == 1) {
rtnDate += outputGannen(waYear)
+ Integer.toString(waMonth)
+ "月"
+ Integer.toString(waDay)
+ "日";
} else {
rtnDate += Integer.toString(waYear)
+ "年"
+ Integer.toString(waMonth)
+ "月"
+ Integer.toString(waDay)
+ "日";
}
} else if ("ggee年MM月dd日".equals(pattern)) {
/* パターン3 */
if (-1 != waGengou) {
rtnDate = GENGOU[waGengou][SHORT];
/* 元年に対応 修正青木 */
if (waYear == 1) {
rtnDate += outputGannen(waYear);
} else if (9 >= waYear) {
/* 2~9年の場合 */
rtnDate += "0" + Integer.toString(waYear) + "年";
} else {
/* 10年~の場合 */
rtnDate += Integer.toString(waYear) + "年";
}
} else if (1000 <= waYear) {
rtnDate += Integer.toString(waYear) + "年";
} else if (100 <= waYear) {
rtnDate += "0" + Integer.toString(waYear) + "年";
} else if (10 <= waYear) {
rtnDate += "00" + Integer.toString(waYear) + "年";
} else if (0 <= waYear) {
rtnDate += "000" + Integer.toString(waYear) + "年";
} else {
rtnDate += Integer.toString(waYear) + "年";
}
/* 1~9月の場合 */
rtnDate += "0" + Integer.toString(waMonth) + "月";
} else {
/* 10~12月の場合 */
rtnDate += Integer.toString(waMonth) + "月";
}
/* 1~9日の場合 */
rtnDate += "0" + Integer.toString(waDay) + "日";
} else {
/* 10~31日の場合 */
rtnDate += Integer.toString(waDay) + "日";
}
/* パターン4 */
if (waGengou != -1) {
rtnDate = GENGOU[waGengou][SHORT];
}
/* 元年に対応 修正青木 */
if (waYear == 1) {
rtnDate += outputGannen(waYear)
+ Integer.toString(waMonth)
+ "月"
+ Integer.toString(waDay)
+ "日";
} else {
rtnDate += Integer.toString(waYear)
+ "年"
+ Integer.toString(waMonth)
+ "月"
+ Integer.toString(waDay)
+ "日";
}
} else if ("gee.MM.dd".equals(pattern)) {
/* パターン5 */
if (-1 != waGengou) {
rtnDate = GENGOU[waGengou][INISIAL_HAN];
if (9 >= waYear) {
/* 1~9年の場合 */
rtnDate += "0" + Integer.toString(waYear) + ".";
} else {
/* 10年~の場合 */
rtnDate += Integer.toString(waYear) + ".";
}
} else if (1000 <= waYear) {
rtnDate += Integer.toString(waYear) + ".";
} else if (100 <= waYear) {
rtnDate += "0" + Integer.toString(waYear) + ".";
} else if (10 <= waYear) {
rtnDate += "00" + Integer.toString(waYear) + ".";
} else if (0 <= waYear) {
rtnDate += "000" + Integer.toString(waYear) + ".";
} else {
rtnDate += Integer.toString(waYear) + ".";
}
/* 1~9月の場合 */
rtnDate += "0" + Integer.toString(waMonth) + ".";
} else {
/* 10~12月の場合 */
rtnDate += Integer.toString(waMonth) + ".";
}
/* 1~9日の場合 */
rtnDate += "0" + Integer.toString(waDay);
} else {
/* 10~31日の場合 */
rtnDate += Integer.toString(waDay);
}
/* パターン6 */
if (-1 != waGengou) {
rtnDate = GENGOU[waGengou][INISIAL_HAN];
}
rtnDate += Integer.toString(waYear) + "." + Integer.toString(waMonth) + "." + Integer.toString(waDay);
/* 上記のパターン以外は"yyyy/MM/dd"で返す(暫定) */
rtnDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(defDate);
}
return rtnDate;
}
/**
* 取得した年度が「01」であった場合
* 表示を行う際に"元年"に変換を行う。
* @param nendo 取得された年度
* @return String 変換された年度
*/
public static String outputGannen(int nendo) {
/* 年度の値が"1"であった場合 */
if (nendo == 1) {
/* "元年"を返す */
return "元年";
}
return null;
}