Windows Win32 APIの令和(和暦)の挙動を試す#1

来月に、いよいよ和暦が平成から令和に変更になります。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ツール (和暦テストツール)を作成しました。

Japanese Calendar Test 1.0.0 – メイン画面

このテストツールは、このページの「ダウンロード&変更内容」の項目からダウンロードできます。

このツールの使い方の説明は、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/081989/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/012019/05/01 (平成31)
令和元年5月1日(変換できず)
令和1年5月1日(変換できず)

こちらも、現時点のビルド18632.53では「令和」に対応できていないようです。実際の実効画面は以下の通りです。

Windows 10 1903 ビルド18362.53での結果

Windows の「令和」への対応状況(2019年4月28日時点)

Window 1903では残念な結果になりました。では、マイクロソフトの公式発表ではどのような対応状況なのでしょうか。2019年4月28日時点の情報を確認しました。

情報はマイクロソフトの以下のサイトにありました。

日本の元号変更に関する Windows の更新プログラムについて – KB4469068

この情報によると2019年4月28日時点で以下のような記載がありました。

最新の更新プログラム

サポート技術情報の記事Windows のバージョン
近日公開予定Windows 10, version 1809 および
Windows Server, version 1809
サポート技術情報  4493437Windows 10, version 1803 および
Windows Server, version 1803
サポート技術情報  4493440Windows 10, version 1709
サポート技術情報  4493436Windows 10, version 1703 および
Windows Server, version 1703
サポート技術情報  4493473Windows 10, version 1607 および
Windows Server 2016
サポート技術情報  4498375Windows 10 RTM
サポート技術情報  4493443Windows 8.1 および
Windows Server 2012 R2
サポート技術情報  4493462Windows Server 2012
サポート技術情報  4493453Windows 7.0 SP1 および
Windows Server 2008 R2 SP1
サポート技術情報  4493460Windows 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年4月30日以前の場合

PCに設定されている日付が2019年5月1日以降の場合

しかし、 PCに設定されている日付が2019年5月1日以降の場合、2019年5月1日以降の元号表示は、 令和になります。

元号「令和」のアップデート対応済みだが、PCの日付が2019年5月1日以降の場合

動作確認結果を以下の表にまとめました。振る舞いがPCの日付によって異なるのは想定外でした。

日付データから日付文字列への変換

Windows 101903180318031803
OSビルド18362.5317134.70617134.75317134.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 101903180318031803
OSビルド18362.5317134.70617134.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/081989/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/012019/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)

One Reply to “Windows Win32 APIの令和(和暦)の挙動を試す#1”

コメントを残す