投稿者 魔界の仮面弁士  (社会人) 投稿日時 2015/11/24 19:46:43
アルファベット一文字を取得するためのスマートな方法は用意されていません。
"昭和" や "昭" なら得られるのですけれどね。

Parse はできるのに Format は出来ない謎仕様。



(案1) Reflection を用いて、非公開メンバー「AbbreviatedEnglishEraNames」に
 アクセスして取り出す。

(案2) 自前で変換表を用意する。

(案3) Windows 7 以降限定で、レジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese
にある、西暦/和暦の元号対応を参照する。

(案4) VarFormat API (VBA の Format 関数) で、書式 "GEE\/MM\/DD" を指定する。



自分の場合は、「DateTime → 和暦String への変換」、
および「和暦String → DateTime の解析変換」のために
自作ライブラリを作って対処しています。上記で言うと 案2 ですね。

(.NET のクラスだけでなく、データベースのストアド関数でも同種の物を用意)


> Console.WriteLine(Date.Now.ToString("ggyy年MM月dd日", cultureInfo))
ちなみに、案3 のレジストリに
 "2045 01 23" = "元号_元_Gengo_G"
と登録しておくと、
 Dim dt As Date = #11/22/2067#
 Console.WriteLine(dt.ToString("g.y.M.d", cultureInfo))
というコードによって、
 .NET 4 以降の場合 … 「元号.23.11.22」
 .NET 4 未満の場合 … 「平成.79.11.22」
が得られます。


元号って、突き詰めると結構ややこしいんですよね…。
昭和→平成は良いのですが、昭和以前が何とも。
http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=8698&page=0

【日付を遡って改元された時期がある】
 「1868年1月25日~1868年10月23日」は、
 「慶応4年1月1日~慶應4年9月8日」であると同時に
 「明治元年1月1日~明治元年9月8日」でもある。

【明治時代に、旧暦から新暦の移行が行われた】
 新暦「明治6年1月1日(1873年1月1日)」の『前日』は、旧暦「明治5年12月2日」(1872年12月31日)

【同じ日に複数の元号が割り当てられている】
 「大正15年12月25日」と『同日』=「昭和元年12月25日」
 「明治45年7月30日」と『同日』=「大正元年7月30日」