- PR -

C#で和暦が扱いたい!!

1
投稿者投稿内容
石野 光仁
会議室デビュー日: 2002/04/18
投稿数: 18
投稿日時: 2002-08-08 10:40
C#でコンポーネントを開発しているのですが、
DataTime型の値を、和暦表示させたいと思っています。
CultureInfoとJapaneseCalendarの組み合わせで、
平成などの元号を表示させることは出来たのですが、
H14/08/08などの記号での和暦表示ができませんでした
コンポーネントなので、埋め込みはしたくないので
解決できればと思っています。

Convertで和暦からの変換もできていますので
何とかすれば取れるんではないのかと 期待しているのですが
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-08-08 14:52
引用:

ME-5501さんの書き込み (2002-08-08 10:40) より:
C#でコンポーネントを開発しているのですが、
DataTime型の値を、和暦表示させたいと思っています。
CultureInfoとJapaneseCalendarの組み合わせで、
平成などの元号を表示させることは出来たのですが、
H14/08/08などの記号での和暦表示ができませんでした
コンポーネントなので、埋め込みはしたくないので
解決できればと思っています。

Convertで和暦からの変換もできていますので
何とかすれば取れるんではないのかと 期待しているのですが
よろしくお願いします。



ms-help://MS.VSCC/MS.MSDNQTR.2002JUL.1041/cpref/html/frlrfsystemglobalizationjapanesecalendarclasstopic.htm
引用:

JapaneseCalendar クラスを使用する場合、 DateTime.Parse は、年の前に表記される時代 (年号) の省略形を認識します。これは、大文字と小文字が区別されないローマ字 1 文字の省略形か、漢字 1 文字の省略形です。


こんなところですかね?
どらごん
会議室デビュー日: 2003/02/05
投稿数: 8
投稿日時: 2003-02-12 12:03
いつも大変参考にさせて頂いております_(_^_)_

さて、私もME-5501さん同様のところでつまづいております。
平成・昭和・大正ではなく、H・S・Tの取得方法が分かりません。
Parseも調べたのですが、取得というより判別だと思いました。

個人的にはCultureInfoコンストラクタに与える"ja-JP"の部分が×なのか、と。
試しにjaのニュートラルカルチャを与えてみましたが、駄目でした。
他を見渡してみても使えそうなものが見当たりません。。。

和暦(H・S・T)を使用するシステムも多いと思いますが、
皆さんはDBや外部ファイルから取得されているのでしょうか?
どうぞ、参考になる情報がございましたらお教え下さい、よろしくお願い致します_(_^_)_
石野 光仁
会議室デビュー日: 2002/04/18
投稿数: 18
投稿日時: 2003-02-12 19:23
Jittaさん 情報ありがとうございました。
返事が遅くなってしまいまして、申し訳ございませんでした。

私も、和暦を扱うところで躓いてしまって
最終的にはシェアードソース? まで調査してみました。
結果を話せは、直接の取得は無理っぽい感じがしました。

そこで強引ですが、以下のような考え方で変換を行いました。
A〜Zで日付を仮想的に作成して(A01/01/01)、強制的に日付型
に変換します。変換できたものを使用できる和暦の記号と判断して、
その情報から和暦記号を表示するようにしました。

実際に作成したコードはもう少しスマートでGetEra? 見たいな
メソッドを利用したと思います。
自宅に帰れば、ソースコードがありますので、私のHPの方から
問い合わせていただければ、実際に書いたソースを送りますけど・・・
どらごん
会議室デビュー日: 2003/02/05
投稿数: 8
投稿日時: 2003-02-13 10:12
引用:

ME-5501さんの書き込み (2003-02-12 19:23) より:
そこで強引ですが、以下のような考え方で変換を行いました。
A〜Zで日付を仮想的に作成して(A01/01/01)、強制的に日付型
に変換します。変換できたものを使用できる和暦の記号と判断して、
その情報から和暦記号を表示するようにしました。



ME-5501さん、情報ありがとうございます。
確かに強引ですが、自分にはそういう発想は出来なかったので、目からウロコです
仮想日付をEraと対応させようと思えば、強制変換日付でソートすれば良い訳
ですから、光が見えた気がします。

ただ、IsDateやParseなどで英字和暦を認識する以上どこかに保持
(オブジェクト化)されているはずなのに、参照出来ないとは・・・(><)

今後も引き続き取得方法が別にあるようでしたらば、情報お待ちしております。
あれば、リファクタリングしたいですもんね♪
石野 光仁
会議室デビュー日: 2002/04/18
投稿数: 18
投稿日時: 2003-02-13 19:55
引用:

どらごんさんの書き込み (2003-02-13 10:12) より:
ただ、IsDateやParseなどで英字和暦を認識する以上どこかに保持
(オブジェクト化)されているはずなのに、参照出来ないとは・・・(><)

今後も引き続き取得方法が別にあるようでしたらば、情報お待ちしております。
あれば、リファクタリングしたいですもんね♪



あんな方法でよかったのでしょうか?

英字和暦の情報がどこにあるかは分かっています。
デバッグ実行中にDateTimeFormatInfo変数の中身を確認してください。
そこに欲しい情報がたくさん詰まっていますよ。
ただ、取得が出来ないんですよね。
(取る方法はあるのかな?)

もう少し時間が取れたら、今使っているロジックを公開用に修正して、
ここの掲示板にもアップしたいと考えているのですが、必要でしょうか?

#DataTime型っていったい…
#DBNull(or null)と普通の値が入る型だったらいいのになぁ
どらごん
会議室デビュー日: 2003/02/05
投稿数: 8
投稿日時: 2003-02-14 10:11
引用:

ME-5501さんの書き込み (2003-02-13 19:55) より:
英字和暦の情報がどこにあるかは分かっています。
デバッグ実行中にDateTimeFormatInfo変数の中身を確認してください。
そこに欲しい情報がたくさん詰まっていますよ。


どもバッチリです♪
ローカルウィンドウを使えばいいなんて初歩的な事に気づきませんでした(^^;

んで、ローカルウィンドウで「それ」に該当する情報を見つけました&取得出来ました!!
DateTimeFormatInfoクラスのAbbreviatedenglishEraNamesプロパティです(密かに)
なんやあるやん!!って思って、隠しGetAbbreviatedenglishEraNameメソッドなんて
あったらなぁ〜って試してみたら・・・やっぱりありません(笑)

どうやら「AbbreviatedenglishEraNames」は、0〜の配列を保持しているだけのようで
Era(Integer)とは無縁のようです。
GetEraメソッドは漢字、英字お構いなくEra(Integer)を正しく認識して返すようですので
これらと組合わせれば、厳密なGetAbbreviatedenglishEraNameメソッドを用意出来そうです。

以上です、隊長!!

#DateTimeFormatInfoクラスを拡張しちゃれっ!と思ったらNotInheritableでした・・・
1

スキルアップ/キャリアアップ(JOB@IT)