none
和暦元号(漢字で)を一覧として取得したい RRS feed

  • 質問

  • 和暦元号(漢字で)を一覧として取得したいのですが、

     

    和暦って扱えるの?扱えます その2

    http://www.ailight.jp/Wareki_2.aspx

     

    上記Webページで、

     

    string[] abbrevEnglishEraNames = (string[])pi.GetValue( FormatInfo, null );

     

    上記処理(ページ内後半のソースの4段目)で、abbrevEnglishEraNames に

    "M", "T", "S", "H" と元号をアルファベットで表した配列が取得できています。

     

    こんな感じで、"明治", "大正", "昭和", "平成" と元号の漢字版を一覧として

    取得できる方法ってないものでしょうか?

     

    ご教授の程、宜しくお願い致します。

     

    環境:
    Windows Vista Ultimate
    Visual Studio 2005 Professional Edition SP1
    .NET Framework 2.0

    2008年4月2日 3:53

回答

  • 外池です。

     

    元号(最近の4つ)を漢字で列挙するだけなら・・・、独自に列挙型で定義するのが一番簡単だと思うのですが。すいません、背景にある意図がよくわかりません。

     

    .Net FrameworkにはJapaneseCalenderクラスというものがあるようですので、これが糸口になるんじゃないでしょうか? と言っても、最近の4つの元号を、番号で現しているだけか・・・。漢字では出てこないみたい。

     

    ----追記---- ごちゃごちゃやっていたら、なんとか出てきました。

     

    Code Snippet

    using System;
    using System.Globalization;

     

            static void Main(string[] args) {
                CultureInfo ci = new CultureInfo("ja-JP");
                ci.DateTimeFormat.Calendar = new JapaneseCalendar();
                DateTimeFormatInfo fi = ci.DateTimeFormat;

                int[] Eras = fi.Calendar.Eras;

                foreach (int Era in Eras) {
                    string EraShortName = fi.GetAbbreviatedEraName(Era);
                    Console.WriteLine(EraShortName);
                    DateTime d = DateTime.Parse(EraShortName + "5/1/1", fi);
                    Console.WriteLine(d);
                    Console.WriteLine(d.ToString("gg", fi));
                }
            }

     

     

    コードの中で、カルチャを指定するja-JPだけが、文字リテラルで決め打ちですが・・・、ひとつも漢字を使わずに、平成、昭和、大正、明治を出せました。

     

    なお・・・、明治元年はまだ太陰暦の時代ということで、JapaneseCalendarがサポートしていません。ということで、少しずらして、各年号の5年の正月の日付を使っています。

     

     

     

     

     

    2008年4月2日 4:30
  • すでにほとんど書かれていますが、JapanaeseCalendar を設定した DateTimeFormat に対して GetEraName() を呼べば手に入りますよ。
     
    カルチャのサポートするすべての年号と、その省略形を出力する
    using System;
    using System.Globalization;
     
    public static class Program
    {
        static void Main()
        {
            CultureInfo ci = CultureInfo.CreateSpecificCulture("ja-JP");
           
            foreach (Calendar cal in ci.OptionalCalendars)
            {
                ci.DateTimeFormat.Calendar = cal;
               
                foreach (int era in cal.Eras)
                    Console.WriteLine("{0} ({1})",
                        ci.DateTimeFormat.GetEraName(era),
                        ci.DateTimeFormat.GetAbbreviatedEraName(era));
            }
        }
    }

     

     

    西暦 (西暦)
    平成 (平)
    昭和 (昭)
    大正 (大)
    明治 (明)
    A.D. (AD)

     

     

     
    2008年4月2日 17:08

すべての返信

  • 外池です。

     

    元号(最近の4つ)を漢字で列挙するだけなら・・・、独自に列挙型で定義するのが一番簡単だと思うのですが。すいません、背景にある意図がよくわかりません。

     

    .Net FrameworkにはJapaneseCalenderクラスというものがあるようですので、これが糸口になるんじゃないでしょうか? と言っても、最近の4つの元号を、番号で現しているだけか・・・。漢字では出てこないみたい。

     

    ----追記---- ごちゃごちゃやっていたら、なんとか出てきました。

     

    Code Snippet

    using System;
    using System.Globalization;

     

            static void Main(string[] args) {
                CultureInfo ci = new CultureInfo("ja-JP");
                ci.DateTimeFormat.Calendar = new JapaneseCalendar();
                DateTimeFormatInfo fi = ci.DateTimeFormat;

                int[] Eras = fi.Calendar.Eras;

                foreach (int Era in Eras) {
                    string EraShortName = fi.GetAbbreviatedEraName(Era);
                    Console.WriteLine(EraShortName);
                    DateTime d = DateTime.Parse(EraShortName + "5/1/1", fi);
                    Console.WriteLine(d);
                    Console.WriteLine(d.ToString("gg", fi));
                }
            }

     

     

    コードの中で、カルチャを指定するja-JPだけが、文字リテラルで決め打ちですが・・・、ひとつも漢字を使わずに、平成、昭和、大正、明治を出せました。

     

    なお・・・、明治元年はまだ太陰暦の時代ということで、JapaneseCalendarがサポートしていません。ということで、少しずらして、各年号の5年の正月の日付を使っています。

     

     

     

     

     

    2008年4月2日 4:30
  • すでにほとんど書かれていますが、JapanaeseCalendar を設定した DateTimeFormat に対して GetEraName() を呼べば手に入りますよ。
     
    カルチャのサポートするすべての年号と、その省略形を出力する
    using System;
    using System.Globalization;
     
    public static class Program
    {
        static void Main()
        {
            CultureInfo ci = CultureInfo.CreateSpecificCulture("ja-JP");
           
            foreach (Calendar cal in ci.OptionalCalendars)
            {
                ci.DateTimeFormat.Calendar = cal;
               
                foreach (int era in cal.Eras)
                    Console.WriteLine("{0} ({1})",
                        ci.DateTimeFormat.GetEraName(era),
                        ci.DateTimeFormat.GetAbbreviatedEraName(era));
            }
        }
    }

     

     

    西暦 (西暦)
    平成 (平)
    昭和 (昭)
    大正 (大)
    明治 (明)
    A.D. (AD)

     

     

     
    2008年4月2日 17:08
  • あれ!? なんで、GetEraNameメソッド見落としていたんだろう?(ボケてる) 省略形しか得られないのかと誤解して余分なコードを書いていました。(すんません)

     

    2008年4月2日 23:57
  • 外池さん、K.Takaokaさん、回答ありがとうございます。

     

    無事、取得する事ができました。

     

    >独自に列挙型で定義するのが一番簡単だと思うのですが

    仰る通りです。

    ただ、独自に構えるより、システム(.NET Framework)から取得できるものはそこから

    取得する、というのが何となく昔からの自分なりの考え方でして。

     

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

     

    2008年4月7日 2:32