トップ回答者
和暦元号(漢字で)を一覧として取得したい

質問
-
和暦元号(漢字で)を一覧として取得したいのですが、
和暦って扱えるの?扱えます その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
回答
-
外池です。
元号(最近の4つ)を漢字で列挙するだけなら・・・、独自に列挙型で定義するのが一番簡単だと思うのですが。すいません、背景にある意図がよくわかりません。
.Net FrameworkにはJapaneseCalenderクラスというものがあるようですので、これが糸口になるんじゃないでしょうか? と言っても、最近の4つの元号を、番号で現しているだけか・・・。漢字では出てこないみたい。
----追記---- ごちゃごちゃやっていたら、なんとか出てきました。
Code Snippetusing 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年の正月の日付を使っています。
-
すでにほとんど書かれていますが、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)
すべての返信
-
外池です。
元号(最近の4つ)を漢字で列挙するだけなら・・・、独自に列挙型で定義するのが一番簡単だと思うのですが。すいません、背景にある意図がよくわかりません。
.Net FrameworkにはJapaneseCalenderクラスというものがあるようですので、これが糸口になるんじゃないでしょうか? と言っても、最近の4つの元号を、番号で現しているだけか・・・。漢字では出てこないみたい。
----追記---- ごちゃごちゃやっていたら、なんとか出てきました。
Code Snippetusing 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年の正月の日付を使っています。
-
すでにほとんど書かれていますが、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)