2013年6月5日水曜日

和暦変換

JapaneseImperialCalendarクラスはAndroidで和暦表示できないんですかね。。
Java 6で和暦を使う
プログラミングお役立ちメモ

private String getJpYear(Calendar calendar) {
    //西暦から和暦を取得する
    //和暦変換テーブル
    String warekiTable[][] = {
        {"18680908","19120729", "明治"},   //明治          
        {"19120730","19261224", "大正"},   //大正
            {"19261225","19890107", "昭和"},   //昭和
            {"19890108","99991231", "平成"}};  //平成
 
    //YYYYMMDDの形式に変換する
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String ymd = sdf.format(calendar.getTime());
    //暦変換テーブルをサーチする
    int i = 0;
    for (i=0; i<warekiTable.length; i++) {
            //当該西暦が開始年以上で最終年以下ならbreak
            if (ymd.compareTo(warekiTable[i][0]) >= 0 && ymd.compareTo(warekiTable[i][1]) <= 0) {
                break;
            }
        }
 
        //暦テーブルに該当レコードがあれば、和暦年を計算する
        if (i < warekiTable.length) {
            int jpYear = calendar.get(Calendar.YEAR) - Integer.parseInt(warekiTable[i][0].substring(0,4)) + 1;
            //和号+和暦年を返す
            return warekiTable[i][2] + jpYear;
        } else {
        //明治より前は西暦で返す
            return calendar.get(Calendar.YEAR).toString();
        }   
    }

日付処理(Calendarクラス)

Calendarクラス

・インスタンス取得
Calendar calendar Calendar.getInstance();

・Dateオブジェクト取得
calendar.getTime();

・年取得
int year = calendar.get(Calendar.YEAR);

・月取得
int month = calendar.get(Calendar.MONTH) + 1;

・日取得
int day = calendar.get(Calendar.DATE);

・時取得
int hour = calendar.get(Calendar.HOUR_OF_DAY);

・分取得
int minute = calendar.get(Calendar.MINUTE);

・秒取得
int second = calendar.get(Calendar.SECOND);

・曜日取得
StringBuffer dow = new StringBuffer();
switch (calendar.get(Calendar.DAY_OF_WEEK)) {
    case Calendar.SUNDAY: dow.append("日曜日"); break;
    case Calendar.MONDAY: dow.append("月曜日"); break;
    case Calendar.TUESDAY: dow.append("火曜日"); break;
    case Calendar.WEDNESDAY: dow.append("水曜日"); break;
    case Calendar.THURSDAY: dow.append("木曜日"); break;
    case Calendar.FRIDAY: dow.append("金曜日"); break;
    case Calendar.SATURDAY: dow.append("土曜日"); break;
}