• ベストアンサー

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

こんにちは! Javaのクラスで”Calender”とか”DateFormat”というクラスで 西暦から和暦とかに変換しようとしてみたんですが、 うまくいきません。 使用方法が間違っているのか、使うクラスが違うのか、 もし知ってる方がいらっしゃいましたら、 教えてください。

  • Java
  • 回答数3
  • ありがとう数12

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

  • ベストアンサー
  • xinman
  • ベストアンサー率30% (25/83)
回答No.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(); } }

appipi
質問者

お礼

こ、こんなすてきなソースがいただけるとは。。。 非常に感激です!!! ほんとうにもうみなみなさまのおかげです。 どうもありがとうございました。

その他の回答 (2)

  • xinman
  • ベストアンサー率30% (25/83)
回答No.2

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
質問者

お礼

なるほど、 やはりクラスはなく自分でロジックを 組まなければいけないんですね。。。 今まで、考えたことがなかったんですが、 >1868年9月8日から1912年7月29日までをと明治する >1912年7月30日から1926年12月24日までをと大正する >1926年12月25日から1989年1月7日までをと昭和する >1989年1月8日から平成する そういうロジックを入れなければいけないんですね! でも、それはどういったロジックになるのでしょうか。。。? もし、差し支えなければ教えてください。 とにかくどうもありがとうございました。

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

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

appipi
質問者

お礼

ありがとうございます。 やはりそういうものなんですね。 >作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか>色々問題があると思いますが・・・ そこまで考えていなかったんで これから考えてみます。 どうもありがとうございました。

関連するQ&A

  • 和暦を西暦に、西暦を和暦に変換する計算式

    和暦(日本の年号)を西暦に変換する計算式と、逆に西暦を和暦に変換する計算式を教えてください。例えば昭和52年を西暦に変換すると何年、のようなことです。またこの計算式を忘れないために覚えるコツなどもあれば教えてください。また、この計算式を分かりやすく解説したサイトもあれば教えてください。

  • 西暦から和暦変換したいのですが

    エクセルの2000を使用しています。西暦を和暦にするには、以前の質問をみても、表示形式をggggeeとするとあったので、そのようにしてみましたが、1と入力してシリアル値が 1904/1/2と表示されるシステムなので1で明治37 2003で明治42と表示されます。私のパソコンのように、シリアル値が、1と打って1904/1/2と表示される場合は、どのように 表示形式を設定すれば、西暦が和暦に変換できるのでしょうか?教えてください。よろしくお願いします。

  • VB2008で西暦を和暦に変換する方法をおしえてください

    VB2008で西暦を和暦に変換する方法をおしえてください

  • 和暦を西暦に変換する方法

    Excel2000を使っています。 和暦でS50やH1、T10などと入っているのを 西暦に直す方法はないでしょうか。 例えば、H17と入っていたら、2005と変換するようにしたいのです。 日付は入っていません。 件数が多いので、一括変換できるような方法をご存知でしたら、教えてください。 宜しくお願いします。

  • 年月日を和暦と西暦に変換したい

    Excelで例えば「38.2.3」の数字をスラッシュを入れて、和暦と西暦に変換したいのですが? どうすればいいか教えていただけますか?

  • 和暦から西暦変換(C#)

    C#で和暦を西暦に変換できませんでしょうか。 例 4月13日 → 2012/4/13 可能でしょうか。サンプルなど付けて頂くとありがたいです。

  • 西暦から和暦に変換する関数を作る

    西暦から和暦に変換する関数をVBAで作りたい(昭和と平成だけ)のですが 良くわかりません。どなたか教えて頂けませんか?

  • 保育士試験対策・・年号は和暦・西暦のどちらで覚えるべき?

    今年の保育士試験を受験しようと考えています。勉強で、人物や出来事等を年号と共に覚えなければいけない事項もありますが、和暦で覚えた方がいいのでしょうか。それとも西暦で覚えた方がいいのでしょうか。実際、過去の試験問題では西暦と和暦のどちらで出題されたのでしょうか。できれば和暦か西暦かのどちらかだけを覚えた方が負担が少ないので教えてください。

  • ファイルメーカーでの西暦から和暦表示への変換方法

    ファイルメーカーでの西暦から和暦表示への変換方法を教えて下さい。

  • 和暦→西暦(有効範囲を考慮)

    いつもお世話になってます。 VB2010(.NET2.0)、Winアプリ 和暦(元号)と西暦の相互変換についてです。 CultureInfo、JapaneseCalendarを使用して変換しています。 西暦→和暦の変換は問題ないんですが 和暦→西暦の変換時に有効ではない和暦を指定するとエラーとなります。 ここの「有効ではない和暦」というのは例えば「大正30年」とかです。 フォーム上にComboBoxとTextBoxが配置されており ComboBoxには「明治」「大正」「昭和」「平成」を格納、 TextBoxは数値入力のみですが2桁数値というだけで 他の制限はかけていない状態です。 各元号に有効な値を保持しといてって方法は最終手段です。 出来るだけ汎用性を持たせた形で上記エラーを回避したいと思っています。 思いついてる方法はあまりスマートではないので どなたか、こんな風にコーディングすれば出来るよって ヒントでもいいのでご意見いただけると幸いです。 よろしくお願いしますm(_ _)m

専門家に質問してみよう