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='../../../WaDate.LZH'>クラスダウンロード</a><br>
* <a href='../../../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);