none
Windows10の新元号対応について RRS feed

  • 質問

  • Windowsにて使用するvb.NETのシステムを構築しています。

     その中で、Format関数を使用して、日付項目の妥当性チェックをしているのですが、

    新元号が導入された際に、正しく動作するかが不安です。

     ネットにて、新元号用にWindowsのパッチが公開され、そこでレジストリに新元号の情報が追加されるとの話を確認しました。

      そこで動作検証として、手動でレジストリに新元号の情報を追加してみたところ

     Windowsのカレンダは確かに、新元号を表示するようになりました。

     しかし、Format関数の動作はレジストリ追加前と変わらず、2019/5/1以降も平成だと思ってるようです。

     今回やりたいこととは関係ないのですが、EXCELも平成のままです。

     windowsのパッチでは、レジストリの追加以外に、新元号用に何か修正モジュール(format関数で新元号を判定可能にする)が提供されるのでしょうか。あるいはOFFICEやvb.NETにもパッチがあるのでしょうか。

     ネットにつながっていない環境で使用しているため、

     可能であれば、大規模なパッチ投入はしたくなく、必要最小限としたいです。

     5月頭のアップデートに新元号対応(新元号を??とする)が含まれていると聞いてますが

     これを投入すれば、format関数の動作も変わるのでしょうか。

     またwindows7についてはどうなるのでしょうか。

     以上、ご教示ください。よろしくおねがいします。 

    2018年8月27日 2:50

すべての返信

  • .NET Framework の String.Format メソッドの事かと思いましたが、Format 関数という表現を使うということは、Visual Basic の話でしょうか。

    とりあえず、『現時点では誰も答えを持っていない』と思います。パッチが提供されてそれで何とかなるだろうと楽観視するか、時間のあるうちに工数を確保して準備を進めておくか、それぞれの事情で判断頂くほか無さそうです。

    日本マイクロソフトからの公式見解としても、改元サポートブログに書かれた以上の情報は出てきていないと思います。仮に発表可能な追加情報が出てくるのなら、このブログが更新される可能性が高いでしょう。(最近だと、平成32年を許容するための仕組みが発表されたりしていますね)

    さて、VBA の Format 関数と VB の Microsoft.VisualBasic.Strings.Format は実装が全く異なっています。前者は OLEAUT32.DLL の実装(VarFormat API や VarDateFromStr API など)に依存していますが、後者は .NET Framework の実装によるものです。また、Excel の日付処理は VBA のものに準じてはいますが、全く同じというわけではありません。

    そして OLEAUT32.DLL については現状、レジストリの和暦エントリーに依存するようにはなっていないようです。(明治大正昭和平成がハードコーディングされているように見える)

    なお、Japanese\Eras レジストリ指定の対象となるのは、基本的に .NET Framework 4 に限られていましたが、3.5x 以下にも適用可能なパッチ提供へと方針転換されています。ただしそれによる悪影響を避けるため、既定の更新には含まれません。(たとえばリフレクションを利用していた製品が動作しなくなる可能性がある)

    こうした変更が、今後 COM/ActiveX の世界にまで影響を与えるのかは分かりません。また、サードパーティー製品(アドイン、ツール、データベース等)の対応状況も確認する必要があるかもしれませんね。

    なお、先のレジストリ設定についても、明治以前の元号(慶応など)への追加や、既存の日付期間の変更などに対応しきれていないケースがありますし、双方向変換とはならない可能性もあるわけです。

    そのほか、Unicode 合字が U+32FF に割り当てられたりしましたが…コードポイントが離れているので、Excel のバージョンによっては、並び替え順などに影響が出るかもしれませんね。

    Console.WriteLine( ChrW(&H337E) )  '㍾
    Console.WriteLine( ChrW(&H337D) )  '㍽
    Console.WriteLine( ChrW(&H337C) )  '㍼
    Console.WriteLine( ChrW(&H337B) )  '㍻
    Console.WriteLine( ChrW(&H32FF) )  '(新元号)
    2018年8月27日 4:38
  • C#ですが、string.Format メソッドで期待通り新しい元号になることを確認しました。
    それより Windows10 の「カレンダー」に和暦を出す方法がわからなかったのですが、あんなところにある項目、よく気がつきましたね。というか、2019年1月を表示すると新元号だったので、ちょっと問題かも。

    Jitta@わんくま同盟

    2018年8月30日 22:44