none
変更された新しい元号を印刷時に表示させるには? RRS feed

  • 質問

  • c#2008 .NET Framework3.5 で作成したアプリでの印刷時に,印刷日を和暦で表示するようにしています。

    元号変更時には,c#2017 .NET Framework4.5でリビルドしなければと思っていたのですが,
    https://social.msdn.microsoft.com/Forums/ja-JP/a93ec79d-69a5-4bb7-ae5d-a8aabfdcb9dd/systemglobalizationcultureinfo?forum=netfxgeneraljaに,

    Windows 7 以降に関しては、レジストリにて新元号を追加できるようになっています。

    具体的には下記のエントリーです。この値は Windows Update でも更新されるそうです。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras\

    "1868 01 01" = "明治_明_Meiji_M"
    "1912 07 30" = "大正_大_Taisho_T"
    "1926 12 25" = "昭和_昭_Showa_S"
    "1989 01 08" = "平成_平_Heisei_H"

    この内容は、.NET Framework 4 以降の JapaneseCalender クラスにも反映されます。
    残念ながらそれ以前のバージョンには非対応ですが。

    ということで,リビルドしなくても .NET Framework4.5をインストールしてwindows10をアップデートするだけでいいのだとおもっていますが,この通りでいいのでしょうか。ご教授願をお願いします。

    ちなみに,和暦を印字するコードは下のようになっています。

    //年月日

    CultureInfo cult_info = new CultureInfo("ja-JP");

    cult_info.DateTimeFormat.Calendar = new JapaneseCalendar();

    DateTime dt = DateTime.Now;

    string gNen = dt.ToString("y", cult_info);

    string gengo = gNen.Substring(0, 2);

    string nen = (gNen.Substring(4, 1) != "") ? gNen.Substring(3, 2) : gNen.Substring(3, 1);

     

    Font myFontDay = new Font("MS明朝", 12, FontStyle.Regular);            e.Graphics.DrawString(gengo +nen + "" + sMonth + "" + sDay + "",

                    myFontDay, Brushes.Black, x - 3, y - 35);

     

    //日付

    f = new Font("MS明朝", 9);

    System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("ja-JP");

    System.Globalization.DateTimeFormatInfo dtfi = ci.DateTimeFormat;

    dtfi.Calendar = new System.Globalization.JapaneseCalendar();

    System.DateTime dTime = System.DateTime.Now;

    e.Graphics.DrawString(dTime.ToString("ggyMd日現在", dtfi), f, Brushes.Black, leftX - 138, y - 17);


    2017年4月8日 1:13

回答

  • いいえ、kenjinoteさんの回答は間違っています。

    .NET Framework 3.5 で作成したアプリを.NET Framework 4 以降で動作させるためにはリビルドは不要です。

    方法 : .NET Framework 4 または 4.5 をサポートするアプリケーションを構成するで説明されていますが、アプリケーション構成ファイルに

    <configuration>
      <startup>
        <supportedRuntime version="v4.0"/>
      </startup>
    </configuration>

    と記述すれば動作します。ページ末尾にはアプリケーション構成ファイルの記述内容 × インストールされているバージョンの組み合わせにより、どのバージョンで動作するのかが表にまとめられています。

    DateTime.Now.ToString("D", cult_info) のように長い形式の日付 ("D") 書式指定子を使用すると、(開発者が書式を強要せず)アプリケーション利用者がコントロールパネルで設定した書式になるため、こちらをお勧めします。エクスプローラーのプロパティダイアログなども長い形式の日付を使用しています。

    2017年4月8日 10:10
  • リビルドしなくても .NET Framework4.5をインストールしてwindows10をアップデートするだけでいいのだとおもっていますが,この通りでいいのでしょうか。ご教授願をお願いします。

    いいえ。.NET Framework 3.5 で作成したアプリの場合は、.NET Framework 4 以降で再度リビルドする [ か、佐祐理さんが書かれているようにビルドした exe と同じディレクトリに *.config を配置する ] 必要があると思います。

    和暦を印字するコードですが、.NET Framework 4 以降でリビルドした場合、新しい元号が取得できると思いますが、元号は 2 文字とは限定されていないので、全体からの Substring をとるのではなく、元号だけ取得する場合は、下記のように取得するのが良いかと思います。

    string gengo = dt.ToString("gg", cult_info);


    新しい、元号が取得できるかどうかは、レジストリに仮に新しい元号を手動で追加して取得できるか試してみることが出来ます。

    追記:佐祐理さんのおっしゃっている通り、config (アプリケーション構成ファイル) を配置する方法でも、新しい元号のが可能でしたので、上記[]の部分を追加しました。佐祐理さん、ご指摘ありがとうございます。
    2017年4月8日 2:49

すべての返信

  • リビルドしなくても .NET Framework4.5をインストールしてwindows10をアップデートするだけでいいのだとおもっていますが,この通りでいいのでしょうか。ご教授願をお願いします。

    いいえ。.NET Framework 3.5 で作成したアプリの場合は、.NET Framework 4 以降で再度リビルドする [ か、佐祐理さんが書かれているようにビルドした exe と同じディレクトリに *.config を配置する ] 必要があると思います。

    和暦を印字するコードですが、.NET Framework 4 以降でリビルドした場合、新しい元号が取得できると思いますが、元号は 2 文字とは限定されていないので、全体からの Substring をとるのではなく、元号だけ取得する場合は、下記のように取得するのが良いかと思います。

    string gengo = dt.ToString("gg", cult_info);


    新しい、元号が取得できるかどうかは、レジストリに仮に新しい元号を手動で追加して取得できるか試してみることが出来ます。

    追記:佐祐理さんのおっしゃっている通り、config (アプリケーション構成ファイル) を配置する方法でも、新しい元号のが可能でしたので、上記[]の部分を追加しました。佐祐理さん、ご指摘ありがとうございます。
    2017年4月8日 2:49
  • いいえ、kenjinoteさんの回答は間違っています。

    .NET Framework 3.5 で作成したアプリを.NET Framework 4 以降で動作させるためにはリビルドは不要です。

    方法 : .NET Framework 4 または 4.5 をサポートするアプリケーションを構成するで説明されていますが、アプリケーション構成ファイルに

    <configuration>
      <startup>
        <supportedRuntime version="v4.0"/>
      </startup>
    </configuration>

    と記述すれば動作します。ページ末尾にはアプリケーション構成ファイルの記述内容 × インストールされているバージョンの組み合わせにより、どのバージョンで動作するのかが表にまとめられています。

    DateTime.Now.ToString("D", cult_info) のように長い形式の日付 ("D") 書式指定子を使用すると、(開発者が書式を強要せず)アプリケーション利用者がコントロールパネルで設定した書式になるため、こちらをお勧めします。エクスプローラーのプロパティダイアログなども長い形式の日付を使用しています。

    2017年4月8日 10:10
  • goodwave さん、こんにちは
    フォーラム オペレーターの立花楓です。
     
    本件についてその後いかがでしょうか。
    kenjinote さん、佐祐理 さんから情報をお寄せいただいておりますので、ご確認いただき、ご返信をいただけましたら幸いです。
     
    また、参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。
     
    宜しくお願いします。

    MSDN/TechNet Community Support 立花楓

    2017年4月17日 6:57
    モデレータ