日期转换方法(西暦->和暦)

 /**
  * 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 = "";
  /* Calendar → Date */
  Date defDate = inCal.getTime();
  int intYYYYMMDD = Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(defDate));
  /* 和暦 元号・年 設定 */
  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);
  }
  if ("gggee年MM月dd日".equals(pattern)) {
   /* パターン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) + "年";
   }
   if (9 >= waMonth) {
    /* 1~9月の場合 */
    rtnDate += "0" + Integer.toString(waMonth) + "月";
   } else {
    /* 10~12月の場合 */
    rtnDate += Integer.toString(waMonth) + "月";
   }
   if (9 >= waDay) {
    /* 1~9日の場合 */
    rtnDate += "0" + Integer.toString(waDay) + "日";
   } else {
    /* 10~31日の場合 */
    rtnDate += Integer.toString(waDay) + "日";
   }
  } else if ("ggge年M月d日".equals(pattern)) {
   /* パターン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) + "年";
   }
   if (9 >= waMonth) {
    /* 1~9月の場合 */
    rtnDate += "0" + Integer.toString(waMonth) + "月";
   } else {
    /* 10~12月の場合 */
    rtnDate += Integer.toString(waMonth) + "月";
   }
   if (9 >= waDay) {
    /* 1~9日の場合 */
    rtnDate += "0" + Integer.toString(waDay) + "日";
   } else {
    /* 10~31日の場合 */
    rtnDate += Integer.toString(waDay) + "日";
   }
  } else if ("gge年M月d日".equals(pattern)) {
   /* パターン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) + ".";
   }
   if (9 >= waMonth) {
    /* 1~9月の場合 */
    rtnDate += "0" + Integer.toString(waMonth) + ".";
   } else {
    /* 10~12月の場合 */
    rtnDate += Integer.toString(waMonth) + ".";
   }
   if (9 >= waDay) {
    /* 1~9日の場合 */
    rtnDate += "0" + Integer.toString(waDay);
   } else {
    /* 10~31日の場合 */
    rtnDate += Integer.toString(waDay);
   }
  } else if ("ge.M.d".equals(pattern)) {
   /* パターン6 */
   if (-1 != waGengou) {
    rtnDate = GENGOU[waGengou][INISIAL_HAN];
   }
   rtnDate += Integer.toString(waYear) + "." + Integer.toString(waMonth) + "." + Integer.toString(waDay);
  } else {
   /* 上記のパターン以外は"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;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值