「お昼の放送」の思い出

こんにちは!

Javaのクラスで”Calender”とか”DateFormat”というクラスで
西暦から和暦とかに変換しようとしてみたんですが、
うまくいきません。

使用方法が間違っているのか、使うクラスが違うのか、
もし知ってる方がいらっしゃいましたら、
教えてください。

A 回答 (3件)

xinmanです。


稚拙なコードですがこんなクラスでいかがでしょうか?

import java.util.*;

public class Wareki {
/*明治*/
private static final int I_MEIJI= 1868;
private static final int I_MEIJI_M= 9;
private static final int I_MEIJI_D= 8;
/*大正*/
private static final int I_TAISHOU= 1912;
private static final int I_TAISHOU_M= 7;
private static final int I_TAISHOU_D= 30;
/*昭和*/
private static final int I_SHOUWA= 1926;
private static final int I_SHOUWA_M= 12;
private static final int I_SHOUWA_D= 25;
/*平成*/
private static final int I_HEISEI= 1989;
private static final int I_HEISEI_M= 1;
private static final int I_HEISEI_D= 8;

private String strGengou = null;
private Date date = null;

/*コンストラクタ*/
/*int iY西暦年*/
/*int iM月*/
/*int iD日*/
public Wareki(int iY,int iM,int iD){
setSeireki(iY,iM,iD);
}
/*コンストラクタ*/
/*int strG和暦元号*/
/*int iY和暦年*/
/*int iM月*/
/*int iD日*/
public Wareki(String strG,int iY,int iM,int iD){
setWareki(strG,iY,iM,iD);
}
/*西暦設定*/
/*int iY西暦年*/
/*int iM月*/
/*int iD日*/
public void setSeireki(int iY,int iM,int iD) {
strGengou = new String("明治以前");
if((iY>I_MEIJI)||(iY==I_MEIJI&&iM>I_MEIJI_M)||(iY==I_MEIJI&&iM==I_MEIJI_M&&iD>=I_MEIJI_D)){
strGengou = new String("明治");
}
if((iY>I_TAISHOU)||(iY==I_TAISHOU&&iM>I_TAISHOU_M)||(iY==I_TAISHOU&&iM==I_TAISHOU_M&&iD>=I_TAISHOU_D)){
strGengou = new String("大正");
}
if((iY>I_SHOUWA)||(iY==I_SHOUWA&&iM>I_SHOUWA_M)||(iY==I_SHOUWA&&iM==I_SHOUWA_M&&iD>=I_SHOUWA_D)){
strGengou = new String("昭和");
}
if((iY>I_HEISEI)||(iY==I_HEISEI&&iM>I_HEISEI_M)||(iY==I_HEISEI&&iM==I_HEISEI_M&&iD>=I_HEISEI_D)){
strGengou = new String("平成");
}
this.date = new Date(iY-1900,iM-1,iD);
}
/*和暦設定*/
/*int strG和暦元号*/
/*int iY和暦年*/
/*int iM月*/
/*int iD日*/
public void setWareki(String strG,int iY,int iM,int iD) {
if(strG.equals("明治")){
iY = iY + I_MEIJI - 1;
}else if(strG.equals("大正")){
iY = iY + I_TAISHOU - 1;
}else if(strG.equals("昭和")){
iY = iY + I_SHOUWA - 1;
}else if(strG.equals("平成")){
iY = iY + I_HEISEI - 1;
}
strGengou = new String("明治以前");
if((iY>I_MEIJI)||(iY==I_MEIJI&&iM>I_MEIJI_M)||(iY==I_MEIJI&&iM==I_MEIJI_M&&iD>=I_MEIJI_D)){
strGengou = new String("明治");
}
if((iY>I_TAISHOU)||(iY==I_TAISHOU&&iM>I_TAISHOU_M)||(iY==I_TAISHOU&&iM==I_TAISHOU_M&&iD>=I_TAISHOU_D)){
strGengou = new String("大正");
}
if((iY>I_SHOUWA)||(iY==I_SHOUWA&&iM>I_SHOUWA_M)||(iY==I_SHOUWA&&iM==I_SHOUWA_M&&iD>=I_SHOUWA_D)){
strGengou = new String("昭和");
}
if((iY>I_HEISEI)||(iY==I_HEISEI&&iM>I_HEISEI_M)||(iY==I_HEISEI&&iM==I_HEISEI_M&&iD>=I_HEISEI_D)){
strGengou = new String("平成");
}
this.date = new Date(iY-1900,iM-1,iD);
}
/*和暦元号取得*/
public String getStrGengou(){
return strGengou;
}
/*和暦年取得*/
public int getIWarekiYear(){
int iY = this.date.getYear() + 1900;
if(getStrGengou().equals("明治")){
iY = iY - I_MEIJI + 1;
}else if(getStrGengou().equals("大正")){
iY = iY - I_TAISHOU + 1;
}else if(getStrGengou().equals("昭和")){
iY = iY - I_SHOUWA + 1;
}else if(getStrGengou().equals("平成")){
iY = iY - I_HEISEI + 1;
}
return iY;
}
/*西暦年取得*/
public int getISeirekiYear(){
return this.date.getYear() + 1900;
}
/*月取得*/
public int getIMonth(){
return this.date.getMonth() + 1;
}
/*日取得*/
public int getIDate(){
return this.date.getDate();
}
}
    • good
    • 0
この回答へのお礼

こ、こんなすてきなソースがいただけるとは。。。
非常に感激です!!!

ほんとうにもうみなみなさまのおかげです。
どうもありがとうございました。

お礼日時:2001/03/17 05:07

Javaに西暦と和暦を変換するクラスは今のところ実装されていません。


必要であれば、
1868年9月8日から1912年7月29日までをと明治する
1912年7月30日から1926年12月24日までをと大正する
1926年12月25日から1989年1月7日までをと昭和する
1989年1月8日から平成する
というロジック自分で用意しなけれなりません。

”DateFormat”クラスはalfeimさんの回答に加えて英語表記で”AD”となるところを日本語表記で”西暦”と表記してくれる機能がありますが和暦への対応はしてません。
    • good
    • 0
この回答へのお礼

なるほど、
やはりクラスはなく自分でロジックを
組まなければいけないんですね。。。

今まで、考えたことがなかったんですが、

>1868年9月8日から1912年7月29日までをと明治する
>1912年7月30日から1926年12月24日までをと大正する
>1926年12月25日から1989年1月7日までをと昭和する
>1989年1月8日から平成する

そういうロジックを入れなければいけないんですね!
でも、それはどういったロジックになるのでしょうか。。。?
もし、差し支えなければ教えてください。

とにかくどうもありがとうございました。

お礼日時:2001/03/05 21:38

自分で実装しないと無いんじゃないでしょうか?


多分DateFormatはYYYY/MM/DDをDD/MM/YYにしたりするようなものだと思いますけど・・・

作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか色々問題があると思いますが・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはりそういうものなんですね。

>作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか>色々問題があると思いますが・・・

そこまで考えていなかったんで
これから考えてみます。

どうもありがとうございました。

お礼日時:2001/03/05 21:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報