-PR-
解決済み

西暦 -> 年号、年号 -> 西暦の変換をするには?

  • すぐに回答を!
  • 質問No.46440
  • 閲覧数1855
  • ありがとう数12
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (13/13)

こんにちは!

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

使用方法が間違っているのか、使うクラスが違うのか、
もし知ってる方がいらっしゃいましたら、
教えてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル9

ベストアンサー率 30% (25/83)

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();
}
}
お礼コメント
appipi

お礼率 100% (13/13)

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

ほんとうにもうみなみなさまのおかげです。
どうもありがとうございました。
投稿日時 - 2001-03-17 05:07:30
関連するQ&A
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル9

ベストアンサー率 30% (25/83)

Javaに西暦と和暦を変換するクラスは今のところ実装されていません。 必要であれば、 1868年9月8日から1912年7月29日までをと明治する 1912年7月30日から1926年12月24日までをと大正する 1926年12月25日から1989年1月7日までをと昭和する 1989年1月8日から平成する というロジック自分で用意しなけれなりません。 ”DateFormat”クラスはalfe ...続きを読む
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”となるところを日本語表記で”西暦”と表記してくれる機能がありますが和暦への対応はしてません。
お礼コメント
appipi

お礼率 100% (13/13)

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

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

>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:40


  • 回答No.1
レベル11

ベストアンサー率 58% (114/195)

自分で実装しないと無いんじゃないでしょうか? 多分DateFormatはYYYY/MM/DDをDD/MM/YYにしたりするようなものだと思いますけど・・・ 作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか色々問題があると思いますが・・・ ...続きを読む
自分で実装しないと無いんじゃないでしょうか?
多分DateFormatはYYYY/MM/DDをDD/MM/YYにしたりするようなものだと思いますけど・・・

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

お礼率 100% (13/13)

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

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

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

どうもありがとうございました。
投稿日時 - 2001-03-05 21:20:37
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ