VB6.0 改元対応 Format のご紹介

2019/5/31更新

はじめに

新元号の「令和」元年となり、1ヶ月が過ぎました。一段落された方も多いかと思います。

弊社も一段落と言いたいところですが、先日、Windows10 1809のOS設定によっては、VB6.0の日付書式が変わる現象が確認できました。

以下 VB6.0のイミディエイトウィンドウを参照ください。 ? nowの結果が「令1/5/31」と「2019/05/31」の違いに注目ください。

こちらはWindowsの設定によって切り替わります。詳細をVB6.0の日付書式問題にてご説明いたします。

VB6.0改元対応Format 今すぐお問い合わせ、御見積


VB6.0の日付書式問題

冒頭の日付書式が切り替わる問題ですが、Windows10 1809パッチにて確認できました。Windows7、WindowsXPでは発生しない現象です。

こちらの動作は、Windows10の「データ形式を変更する」の画面より、カレンダーの設定値を変更することにより動作の違いが起こります。

「データ形式を変更する」の画面は、Windows10のデスクトップ右下の日付表示部分を右クリック → 日付と時刻の調整(A) → 地域 → データ形式を変更するにて表示されます。

Nowの表記が令1/5/31となる設定
Nowの表記が2019/5/31となる設定

日付については、Format()関数にて表示書式指定を行えば、データ形式設定の値に関係なく一定した結果が得られますが、文字列に変換した際に、必ず西暦が取得されることを期待したプログラムの場合、設定値によって和暦となることから何らかの対処が必要です。

グレープシティ製のimDateコントロールでは、ImDate.ValueプロパティーではDisplayFormatの書式に関係なく、西暦が取得されましたが、こちらの動作も変わります。

後続に記載します「VB6.0改元対応Fomrat製品」では、日付書式などをチェックする「EraInitialize」を準備しており、当該命令の実行にて、設定不良がある場合、警告メッセージを表示して異常終了させる機能を準備しております。


プログラムの動作環境は顧客側で設定変更される可能性もありますので、当該機能にて、思わぬ事故を回避でると考えております。

データ書式は馬鹿にならず、NowをそのままDBフィールドに設定するプログラムがあった場合、設定によっては和暦がセットされる事となります。

プログラムが西暦を期待している場合、当該データの読み込みにて不正データとして扱われ、場合によっては重大な不具合につながる可能性もあります。

しっかりした対応が望まれます。

VB6.0改元対応Format 今すぐお問い合わせ、御見積


VB6.0における和暦状況

VB6.0は日付編集機能をFormat()関数でサポートしています。

延長サポート期間内のOS製品であれば、マイクロソフト社より更新パッチが提供されます。

安心して2019/5/1を迎えられればと思いたいところですが、パッチレベルや今後の対応にてFormat()の動作が変わるため、十分な確認が必要となります。

Win10 バージョン1903 Officeパッチレベル 2019/4/10パッチ導入環境

? vba.format("1989/1/8","gee年m月d日")
H元年1月8日   ←  従来は H01年1月8日となっていた (「年」との漢字文字列が入ると、「元」年になるようです)
? vba.format("1989/1/8","gee/m/d")
H01/1/8   ←  こちらは従来と同じく元年ではなく、01が返ってくる。

注意:レジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calenders\Japanese\InitialEraYear = 元年(Win10時期大型アップデート1903の初期値)がセットされている場合の動作

サポート期間中のOS製品であっても改変の真っ只中のため、情報収集や場合によっては個別対応が必要となります。

弊社では、改元対応版のFormat()関数を独自実装し、OSの更新パッチ不要で改元対応を実現いたしました。

弊社製品の導入にてOSの仕様変更に影響を受けず、以前どおりの動作を提供できることから、お役に立てるのではないかと考えます。

VB6.0改元対応Format 今すぐお問い合わせ、御見積


VB6.0改元対応(OS仕様変更及びサポート終了OSでの対応)

冒頭に記載しましたが、Windows10 1903(時期大型アップデート)では、令和01年が令和元年と表記されるよう仕様変更が見込まれています。OSの仕様変更に対し、何らかの対処が必要となってきます。

また、延長サポートが終了したOSではVB6.0の改元対応について更新パッチの配布は行われません。

弊社では、VB6.0にて日付和暦編集の際に使用するFormat()関数について独自に改元対応し、「VB6.0 改元対応 Format」製品として販売を行っております。


VB6.0 改元対応 Format 製品

「VB6.0 改元対応 Format 」は、Format()関数の和暦編集機能を独自実装しております。

そのため、WindowsXPやVistaなど延長サポート終了となったOSでも、改元対応が可能です。

また、更新パッチが適用できない特別な理由がある場合もお役に立てます。

VB6.0改元対応FormatはBASファイルソースとして提供します。お客様側でVBPに追加頂くのみで、改元対応可能です。(別途お客様側で動作確認は必要です)

詳細はこちらの資料をご覧ください。

VB6.0改元対応Formatは有償製品です。お問い合わせ、御見積よりご依頼ください。


WindowsXpでも動作します

現時点(2019/5/7)、標準Formatは次の通りOS製品によって動作が異なる状況となっており、今後も改変が進むことから、注意が必要となっています。(部分参照)

弊社製品の動作結果は「改元対応Format」へ示すとおり、VB6.0プログラマにとって違和感のない値が戻されます。 (改元対応Formatでは動作仕様をプログラム単位、Format()命令単位に変更可能です。)

OSバージョン InitialEraYear初期値 西暦 標準Format 改元対応Format
gggee年m月d日 gggee/m/d gggee年m月d日 gggee/m/d
Win10 1903
KB4497093,KB4495666導入済
元年 1989/1/8 平成元年1月8日 平成01/1/8 平成01年1月8日 平成01/1/8
2019/5/1 令和元年5月1日 令和01/5/1 令和01年5月1日 令和01/5/1
Win10 1809 1年 1989/1/8 平成01年1月8日 平成01/1/8 平成01年1月8日 平成01/1/8
2019/5/1 令和01年5月1日 令和01/5/1 令和01年5月1日 令和01/5/1
Win7 1年 1989/1/8 平成01年1月8日 平成01/1/8 平成01年1月8日 平成01/1/8
2019/5/1 令和01年5月1日 令和01/5/1 令和01年5月1日 令和01/5/1
WinXP なし 1989/1/8 平成01年1月8日 平成01/1/8 平成01年1月8日 平成01/1/8
2019/5/1 平成31年5月1日 平成31/5/1 令和01年5月1日 令和01/5/1

多忙なシステム開発や保守の中、改元対応は弊社製品にて対応はいかがでしょうか?

いますぐお問い合わせ、御見積よりご依頼ください。


VB6.0 改元対応 Formatサンプルプログラム

VB6.0改元対応Formatの動作確認用EXE形式のプログラムです。製品の動作把握にご利用ください。

サンプルダウンロード2019/4/14更新


いますぐお問い合わせ、御見積よりご依頼ください。


VB6.0改元対応(サポート期間中のOS)

サポート期間中のOS(Windows7以降)ではマイクロソフト社より更新パッチが配布されることが公表されています。

弊社では2019/3/11時点でWindows10 Pro バージョン1809 OSビルド17763.348にて以下のとおり、VB6.0のFormat改元対応がなされていることが確認できました。

こちら「経済産業省のページ「新元号対応について」日本マイクロソフト株式会社」の記事より確認しました。

しかしながら、和暦初年の扱いがOS製品や設定により異なることから、それら影響を受けない弊社改元対応Formatをおすすめするところです。

レジストリ登録情報
VB6.0イミディエイトでのformat和暦表示

2019/5/1がレジストリ登録した仮元号のK01/05/01表記と正しく元号解釈のうえ表示されています。

是非、以下よりお問い合わせをお待ちしております。

ありがとうございました。

当ページを拡散頂けると幸せます