liangx85

Java处理和历

package jp.co.soukyoku;
import java.lang.*;
import java.io.*;
import java.util.*;
import java.text.*;
/**
* 和暦変換クラス<br>
* Javaで和暦の元号を扱うためのクラスです。<br>
* 日付までを判定の条件として年号を決めています。<br>
* WaDate は、GregorianCalendar のサブクラスであり、<br>
* 和暦を含む世界のほとんどの地域で使用される標準的なカレンダを提供します。 <br>
* GregorianCalendarを継承しているため、GregorianCalendarのメソッドがそのまま利用できるほかに<br>
* Date 型と異なるインターフェイスが使いにくかったため、Date型と同様のインタフェースのいくつかを備えました。<br>
* <br>
* Classモジュールはフリーソフトです。<br>
* ソースは、シェアウェア扱いにさせていただきます。<br>
* 営利目的でない場合には自由に使用することができますが、著作権は放棄していません。<br>
* また、営利目的でご使用になる場合には、個別に対応いたしますのでご連絡ください。<br>
* 本モジュールを公開するにあたり、動作には万全を期しているつもりですが、<br>
* 本モジュールによって起きたいかなる損害も作者は責任を持ちませんので、<br>
* 各自の責任にてお使いください。<br>
* また、本モジュールの欠陥・不良を発見された場合には、作者までご連絡頂ければ幸いです。<br>
* <a href='http://www.cnblogs.com/../WaDate.LZH'>クラスダウンロード</a><br>
* <a href='http://www.cnblogs.com/../WaDate.java'>ソースダウンロード</a><br>
* <br>
* @version 1.0.0
* @since   2001.12.12
* @author 双極織技工房
*
* @履歴
* 1.0.0 2001.12.12 新規作成
*/
public class WaDate extends GregorianCalendar{
private Date        date;
private Calendar    cal;
private double      ver = 1.00;
// 和暦関係領域
private String      nengou;
private int         nen;
private String      HEISEI = "平成";
private String      SYOUWA = "昭和";
private String      TAISYO = "大正";
private String      MEIJI  = "明治";
/**
* コンストラクタ
*
*/
public WaDate(){
    super();
}
/**
* コンストラクタ
*
* @param argLong  初期化したい日付情報、Date#getTime()<br>
*/
public WaDate(long argLong ){
    super();
    super.setTime(new Date(argLong));
}
/*******************************************************************************/
// 取得関係処理
/*******************************************************************************/
/**
* 年号の漢字部分取得処理<br>
* <br>
* 内部に持たれた日付に対応した元号を返します。<br>
* 元号は、日付単位まで判定基準として利用しているため1989/1/7 は<br>
* 昭和64年になりますが、1989/1/8平成1年と判断されます。<br>
* <br>
* 明治:1868年 1月 1日 ~ 1912年 7月29日まで<br>
* 大正:1912年 7月30日 ~ 1926年12月24日まで<br>
* 昭和:1926年12月25日 ~ 1989年 1月 7日まで<br>
* 平成:1989年 1月 8日 ~<br>
* <br>
* @return 明治~平成
*/
public String getNengou(){
  this.makeNengou();
  return  nengou;
}
/**
* 年号の漢字部分取得処理<br>
* <br>
* 年号に対応した年度を返します。<br>
* 1926年12月25日<br>
* 1989年 1月 8日<br>
* の双方が1を返すことになります。<br>
* <br>
* @return 和暦に変換した場合の年度
*/
public int getNen(){
  this.makeNengou();
  return  nen;
}
/**
* 西暦の取得処理<br>
* <br>
* GregorianCalendar型の実装の仕方がCalendar型に沿っていたため<br>
* Date型と同様のインターフェイスを備えました。<br>
* 西暦4桁で年度を返します。<br>
* <br>
* @return 西暦4桁
*/
public int getYear(){
  return  this.get(Calendar.YEAR);
}
/**
* 月の取得処理<br>
* <br>
* GregorianCalendar型の実装の仕方がCalendar型に沿っていたためDate型と同様のインターフェイスを備えました。<br>
* 月をintで返します。<br>
* Date型に準じているため月が0~11までであることに注意してください。<br>
* <br>
* @return 0~11
*/
public int getMonth(){
  return  this.get(Calendar.MONTH);
}
/**
* 日の取得処理<br>
* <br>
* GregorianCalendar型の実装の仕方がCalendar型に沿っていたためDate型と同様のインターフェイスを備えました。<br>
* 日をintで返します。<br>
* <br>
* @return -1~31
*/
public int getDate(){
  return  this.get(Calendar.DATE);
}
/**
* 日付文字列<br>
* デフォルトのケールに対し、指定されたフォーマットスタイルを持つ日付文字列を返します。
* 日本の例:2001/12/12 20:00:00
* <br>
* @return ローカルのフォーマットで編集された日付文字列
*/
public String toString(){
  return new String(DateFormat.getDateTimeInstance().format(this.getTime()) );
}
/**
* 日付文字列<br>
* 年号で編集された日付文字列を返します。例:平成12年 1月12日
* <br>
* @return ローカルのフォーマットで編集された和年号日付文字列
*/
public String toWaString(){
  String              myPattern     = "#0";
  DecimalFormat       form;        // java.text.*
  int         ltuki;
  int         lniti;
  String      strRet  = new String("");
  ltuki   = this.getMonth() + 1;
  lniti   = this.getDate();
  if( this.nen < 10 ){
    strRet += this.getNengou() + " " + this.nen;
  }else{
    strRet += this.getNengou() + this.nen;
  }
  if( ltuki < 10 ){
    strRet += "年 " + ltuki;
  }else{
    strRet += "年" + ltuki;
  }
  if( lniti < 10 ){
    strRet += "月 " + lniti + "日";
  }else{
    strRet += "月" + lniti + "日";
  }
  return strRet.toString();
}
/**
* 和暦計算<br>
* 内部に持った値に対応する年号の作成
* <br>
*/
private void makeNengou(){
  int     year;
  int     month;
  int     day;
  year    =   this.getYear();
  month   =   this.getMonth() + 1;
  day     =   this.getDate();
  if(year > 1988) {
    if( month == 1 && day <= 7 ){               // 昭和と平成の境
      nengou  = new String(SYOUWA);
      nen     = year - 1925;
    } else {
      nengou  = new String(HEISEI);
      nen     = year - 1988;
    }
  } else if( year > 1925 ){
    if( month == 12 && day <= 24 ){
      nengou  = new String(TAISYO);           // 昭和と大正の境
      nen     = year - 1911;
    } else {
      nengou  = new String(SYOUWA);
      nen     = year - 1925;
    }
  } else if( year > 1911 ){                       // 大正と明治の境
    if( month < 7 || ( month == 7 && day <= 29 )){
      nengou  = new String(MEIJI);
      nen     = year - 1867;
    } else {
      nengou  = new String(TAISYO);
      nen     = year - 1911;
    }
  }else if(  year > 1867){
    nengou  = new String(MEIJI);                // 明治とその前の境
    nen     = year - 1867;
  }else{
    nengou  = new String("ERR");
    nen     = 0;
  }
}
}

posted on 2007-07-18 09:58  liangx85  阅读(79)  评论(0)    收藏  举报

导航