来月に、いよいよ和暦が平成から令和に変更になります。Windowsは、かなり前から和暦を扱うAPIが用意されていました。今回、これらのAPIのうち、Nativeアプリ用のAPIを試してみました。
Windows APIの中には、日付データを扱うAPIはたくさんあります。 これらのAPIは新しい和暦の「令和」に対応します。 これらのAPIの中で、日付データと日付テキスト文字列を相互変換するWin32 APIについて、新しい和暦の「令和」への挙動を確認してみます。今回は、.NET frameworkのAPIは対象とせずNativeのWin32 APIのみを対象とします。
日付データと日付テキスト文字列を相互変換するWin32 API
日付データを日付テキスト文字列に変換するWin32 APIには以下のものがあります。
GetDateFormat()
VarBstrFromDate()
また、日付テキスト文字列から日付データへ変換するWin32 API には以下のものがあります。
VarDateFromStr()
これらについてWindowsの挙動を確認してみたいと思います。主に「令和」の対応状況を確認します。
和暦の挙動を確認するテストツール
上記の3つのAPIの挙動を確認するためには、確認するためにプログラムが必要です。そこで、Japanese Calendar Testツール (和暦テストツール)を作成しました。
このテストツールは、このページの「ダウンロード&変更内容」の項目からダウンロードできます。
このツールの使い方の説明は、1.0.0のダウンロードページに記載してあります。
日付データから日付文字列への変換
日付データから日付文字列への変換の振る舞いは、テストツールの一つ目(上側)のグループボックス内で確認できます。中央の列は、ツールを起動したときの日付の変換結果を表示します。右側の列は、日付選択コントロールで日付を選択すると、その選択した日付デの変換結果を表示します。
Windows 10 1903 ビルド18362.53 (Windows 10 May 2019 Update)での確認結果は以下となります。
選択した日付 | 変換された日付文字列 (Windows 10 1903 ビルド18362.53) |
1926/12/25 | 昭和元年12月25日 |
1989/01/07 | 昭和64年1月7日 |
1989/01/08 | 平成元年1月8日 |
2019/04/30 | 平成31年4月30日 |
2019/05/01 | 平成31年5月1日 |
うーん。ビルド18362.53では、まだ対応できていないようです。
日付テキスト文字列から日付データへ変換
日付データから日付文字列への変換の振る舞いは、テストツールの二つ目(下側)のグループボックス内で確認できます。左側のコンボボックスから選択するか、日付文字列を入力すると認識できた日付データを右側に表示します。右側には、西暦での表示と元号を表示します。
Windows 10 1903 ビルド18362.53 (Windows 10 May 2019 Update)での確認結果は以下となります
入力した日付文字列 | 変換された日付データ(西暦(元号)) (Windows 10 1903 ビルド18362.53) |
昭和元年12月25日 | 1926/12/25 (昭和01) |
昭和1年12月25日 | 1926/12/25 (昭和01) |
昭和64年1月7日 | 1989/01/07 (昭和64) |
1989/01/08 | 1989/01/08 (平成01) |
平成元年1月8日 | 1989/01/08 (平成01) |
平成1年1月8日 | 1989/01/08 (平成01) |
平成31年4月30日 | 2019/04/30 (平成31) |
2019/05/01 | 2019/05/01 (平成31) |
令和元年5月1日 | (変換できず) |
令和1年5月1日 | (変換できず) |
こちらも、現時点のビルド18632.53では「令和」に対応できていないようです。実際の実効画面は以下の通りです。
Windows の「令和」への対応状況(2019年4月28日時点)
Window 1903では残念な結果になりました。では、マイクロソフトの公式発表ではどのような対応状況なのでしょうか。2019年4月28日時点の情報を確認しました。
情報はマイクロソフトの以下のサイトにありました。
日本の元号変更に関する Windows の更新プログラムについて – KB4469068
この情報によると2019年4月28日時点で以下のような記載がありました。
最新の更新プログラム
サポート技術情報の記事 | Windows のバージョン |
近日公開予定 | Windows 10, version 1809 および Windows Server, version 1809 |
サポート技術情報 4493437 | Windows 10, version 1803 および Windows Server, version 1803 |
サポート技術情報 4493440 | Windows 10, version 1709 |
サポート技術情報 4493436 | Windows 10, version 1703 および Windows Server, version 1703 |
サポート技術情報 4493473 | Windows 10, version 1607 および Windows Server 2016 |
サポート技術情報 4498375 | Windows 10 RTM |
サポート技術情報 4493443 | Windows 8.1 および Windows Server 2012 R2 |
サポート技術情報 4493462 | Windows Server 2012 |
サポート技術情報 4493453 | Windows 7.0 SP1 および Windows Server 2008 R2 SP1 |
サポート技術情報 4493460 | Windows Server 2008 SP2 |
気づいたと思いますが、Windows 1809にはKB4469068に対応するアップデートがまだリリースされていないのです。それに連動してなのか、現時点で一般ユーザーにリリースされていないWindows 10 1903にもまだリリースされていないようです。(2019年04月28日時点では、Windows 10 1903は、Windows Insiderなど特定ユーザーのみに配布されています。)
そのため、Windows 10 1903上での動作確認では「令和」への対応が確認できないようです。
Windows 10 1903/1809で KB4469068に対応するアップデートが出たらもう一度試してみたいと思います。
また、確認する時間がなく、現時点ではWindows 10 1903でしか確認できていませんが、もう少し別のWindowsでも動作確認して 別の機会に結果を報告したいと思います。
(2019年4月30日追記) Windows 10 1803での結果
現時点(2019年4月30日)でのWindows Insiderビルド(Windows 10 1903)の動作結果だけでは、さすがに参考になりません。そのため、追加でWindows 10 1803も動作を確認しました。
元号「令和」対応のアップデートであるKB4493437を適用前のWindows 10 1803の環境があったので、それで確認しました。
KB4493437の適用前は、元号「令和」に全く対応できていません。
KB4493437の適用後は、無条件に元号「令和」に対応されると思ったら少し挙動が違いました。具体的にはPCに設定されている日付で挙動が異なりました。
また、「令和」の扱い以外にも違いがみられました。Windows 10 1803とWindows 10 1903で既存の年号で挙動に違いがあったのです。それは元号の「元年」の扱いです。Windows 10 1803では、元号の元年は「平成1年」のように、数値です。しかし、Windows 10 1903では、元号の元年は「平成元年」のように、表現がより日本向けにローカライズされています。
PCに設定されている日付が2019年4月30日以前の場合
PCに設定されている日付が2019年4月30日以前の場合、2019年5月1日以降の元号表示は、 相変わらず、 平成のままとなります。ただし、令和表記の日付文字列は認識できるようになっているようで、日付データとして認識できるようになりました。
PCに設定されている日付が2019年5月1日以降の場合
しかし、 PCに設定されている日付が2019年5月1日以降の場合、2019年5月1日以降の元号表示は、 令和になります。
動作確認結果を以下の表にまとめました。振る舞いがPCの日付によって異なるのは想定外でした。
日付データから日付文字列への変換
Windows 10 | 1903 | 1803 | 1803 | 1803 |
OSビルド | 18362.53 | 17134.706 | 17134.753 | 17134.753 |
KB4469068相当 | 未適用 | ← | KB4493437 適用済み | ← |
PCの日付 | 2019年 4月28日 | 2019年 4月30日 | ← | 2019年 5月30日 |
選択した日付 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 |
1926/12/25 | 昭和元年12月25日 | 昭和1年12月25日 | ← | ← |
1989/01/07 | 昭和64年1月7日 | ← | ← | ← |
1989/01/08 | 平成元年1月8日 | 平成1年1月8日 | ← | ← |
2019/04/30 | 平成31年4月30日 | ← | ← | ← |
2019/05/01 | 平成31年5月1日 | ← | ← | 令和1年5月1日 |
日付テキスト文字列から日付データへ変換
Windows 10 | 1903 | 1803 | 1803 | 1803 |
OSビルド | 18362.53 | 17134.706 | 17134.753 | ← |
KB4469068相当 | 未適用 | ← | KB4493437 適用済み | ← |
PCの日付 | 2019年 4月28日 | 2019年 4月30日 | ← | 2019年 5月30日 |
入力した 日付文字列 | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) |
昭和元年12月25日 | 1926/12/25 (昭和01) | ← | ← | ← |
昭和1年12月25日 | 1926/12/25 (昭和01) | ← | ← | ← |
昭和64年1月7日 | 1989/01/07 (昭和64) | ← | ← | ← |
1989/01/08 | 1989/01/08 (平成01) | ← | ← | ← |
平成元年1月8日 | 1989/01/08 (平成01) | ← | ← | ← |
平成1年1月8日 | 1989/01/08 (平成01) | ← | ← | ← |
平成31年4月30日 | 2019/04/30 (平成31) | ← | ← | ← |
2019/05/01 | 2019/05/01 (平成31) | ← | ← | 2019/05/01 (令和01 |
令和元年5月1日 | (変換できず) | ← | 2019/05/01 (平成31) | 2019/05/01 (令和01) |
令和1年5月1日 | (変換できず) | ← | 2019/05/01 (平成31) | 2019/05/01 (令和01) |
“Windows Win32 APIの令和(和暦)の挙動を試す#1” への1件の返信