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

さて、2019年5月1日を過ぎ、元号が「令和」に完全に切り替わりました。前回の投稿では、一部のWindowsでしか動作を試せなかったので、Windows 7以降の全OSで動作を試しました。

新しい和暦の「令和」への挙動確認の対象のAPIは、前回と同じでNativeの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 の「令和」への対応状況(2019年5月2日時点)

前回の投稿では、Window 10 1903/1809では残念な結果になりました。しかし、その後、5月2日に対応状況が更新されました。

マイクロソフトの公式発表では以下の通りの対応状況です。2019年5月2日時点の情報です。

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

最新の更新プログラム

サポート技術情報の記事Windows のバージョン
サポート技術情報  4501835Windows 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 10 1809が「近日公開予定」から、「KB4501835」に更新されました。これに連動して、Windows 10 1903にも「令和」に対応したものと思われる「KB4497093」が全ユーザー向けにリリースされました。

これで、すべてのWindowsで「令和」対応のアップデートがリリースされたことになります。Windows 10 20H1には、公式なアナウンスがないので、「令和」への対応状況は、実際の振る舞いで確認したいと思います。

動作確認結果

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

KB4469068相当が未適用

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Windows 8.1Windows 7
SP1
OSビルド18875.100018362.5317763.117134.70696007601
選択した日付変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
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日
(PCの日付が4月30日以前)

令和元年5月1日
(PCの日付が5月1日以降)
平成31年5月1日

Windows 10 20H1以外については、挙動はほぼ同じです。「令和」の期間は、すべて「平成」として扱われます。

Windowsにより挙動が異な部分は「令和」に関するところではありません。 元号の初年の元年の扱いがWindows 10 1809以前と後では異なります。 Windows 10 1809以前では、元号の初年度は「1年」と変換されます。しかし、 Windows 10 1903以降では、元号の初年度は「元年」と変換されます。

Windows 10 20H1については、「KB4469068相当」の情報はないです。しかし、挙動からビルド18875.1000では、適用済みの状態のようです。結果として、Windows 10 20H1の結果は、「令和」の期間(2019年5月1日以降の日付) に関しては「PCの日付が4月30日以前」と「PCの日付が5月1日以降」で挙動が異なります。


KB4469068相当が適用済み(PCの日付が2019年4月30日以前の場合)

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Windows 8.1Windows 7
OSビルド18875.100018362.8617763.43917134.75396007601
選択した日付変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
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日

「KB4469068相当」のアップデート が適用済みの場合、PCの日付によって挙動が異なります。この結果は、PCの日付が2019年4月30日以前の場合の結果です。

元号「令和」に対応済みのすべてのWindowsにおいて、挙動はほぼ同じです。「KB4469068相当」のアップデート が適用済みであっても、「令和」の期間(2019年5月1日以降の日付)も「平成」として変換されます。

Windowsにより挙動が異な部分は「令和」に関するところではありません。元号の初年の元年の扱いがWindows 10 1809以前と後では異なります。 Windows 10 1809以前では、元号の初年度は「1年」と変換されます。しかし、 Windows 10 1903以降では、元号の初年度は「元年」と変換されます。


KB4469068相当が適用済み(PCの日付が2019年5月1日以降の場合)

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Windows 8.1Windows 7
OSビルド18875.100018362.8617763.43917134.75396007601
選択した日付変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
変換された
日付文字列
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令和元年5月1日令和1年5月1日

「KB4469068相当」のアップデート が適用済みの場合、PCの日付によって挙動が異なります。この結果は、PCの日付が2019年5月1日以降の場合の結果です。

元号「令和」に対応済みのすべてのWindowsにおいて、挙動はほぼ同じです。「KB4469068相当」のアップデート が適用済みであれば、「令和」の期間(2019年5月1日以降の日付)は「令和」として変換されます。

Windowsにより挙動が異な部分は「令和」に関するところではありません。元号の初年の扱いがWindows 10 1809以前と後では異なります。 Windows 10 1809以前では、元号の初年は「1年」と変換されます。しかし、 Windows 10 1903以降では、元号の初年は「元年」と変換されます。

日付テキスト文字列から日付データへ変換


KB4469068相当が未適用

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Window 8.1Windows 7
SP1
OSビルド18875.100018362.5317763.117134.70696007601
入力した
日付文字列
認識された日付データ(西暦(元号))
昭和元年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)
2019/05/01 (平成31)
令和元年5月1日2019/05/01 (平成31)
2019/05/01 (令和01)
(変換できず)
令和1年5月1日2019/05/01 (平成31)
2019/05/01 (令和01)
(変換できず)
平成31年12月31日2019/12/31 (平成31)
2019/12/31 (令和01)
2019/12/31 (平成31)
平成32年1月1日(変換できず)
(変換できず)
2020/01/01 (平成32)

Windows 10 20H1以外については、挙動はほぼ同じです。「令和」の文字は認識されません。

Windowsにより挙動が異な部分は「令和」に関するところではありません。元号の元年の扱いがWindows 10 1809以前と後で異なります。 Windows 10 1809以前では、元号の初年度は「1年」であれば認識されますが、「元年」は認識されません。しかし、 Windows 10 1903以降では、元号の初年度は「1年」および「元年」の両方とも認識されます。

Windows 10 20H1については、「KB4469068相当」の情報はないです。しかし、挙動からビルド18875.1000では、適用済みの状態のようです。結果として、Windows 10 20H1の結果は、「令和」の期間(2019年5月1日以降の日付) に関しては、「PCの日付が4月30日以前」と「PCの日付が5月1日以降」で挙動が異なります。

Windows 10 20H1については表の中で結果の一行目が「PCの日付が4月30日以前」の場合の結果で、結果の2行目が「PCの日付が5月1日以降」の場合の結果です。

また、Windows 10 20H1では、平成32年以降の平成の年号は認識されません。しかし、Windows 10 1903以前では、平成32年以降の平成の年号も認識されます。実際には存在しない年号となりますが、対応する西暦の日時として認識されます。


KB4469068相当が適用済み(PCの日付が2019年4月30日以前の場合)

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Windows 8.1Windows 7
SP1
OSビルド18875.100018362.8617763.43917134.75396007601

入力した
日付文字列
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
昭和元年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日2019/05/01 (平成31)
令和1年5月1日2019/05/01 (平成31)
平成31年12月31日2019/12/31 (平成31)
平成32年1月1日(変換できず)2020/1/1 (平成32)

「KB4469068相当」のアップデート が適用済みの場合、PCの日付によって挙動が異なります。この結果は、PCの日付が2019年4月30日以前の場合の結果です。

Windows 10 20H1以外については、挙動は同じです。「令和」の文字は認識されす。

「元年」の表記は、すべてのWindowsで認識されるようになりました。

Windows 10 20H1での違いは、平成32年以降の平成の年号は認識されないことです。Windows 10 1903以前では、平成32年以降の平成の年号も認識されます。実際には存在しない年号となりますが、対応する西暦の日付として認識されます。


KB4469068相当が適用済み(PCの日付が2019年5月1日以降の場合)

WindowsWindows 10
20H1
Windows 10
1903
Windows 10
1809
Windows 10
1803
Windows 8.1Windows 7
SP1
OSビルド18875.100018362.8617763.43717134.75396007601

入力した
日付文字列
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
認識された
日付データ
(西暦(元号))
昭和元年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 (令和01)
令和元年5月1日 2019/05/01 (令和01)
令和1年5月1日 2019/05/01 (令和01)
平成31年12月31日2019/12/31 (令和01)
平成32年1月1日(変換できず)2020/01/01 (令和02)

「KB4469068相当」のアップデート が適用済みの場合、PCの日付によって挙動が異なります。この結果は、PCの日付が2019/05/01以降の場合の結果です。

Windows 10 20H1以外については、挙動は同じです。「令和」の文字は認識されす。

「元年」の表記は、すべてのWindowsで認識されるようになりました。

Windows 10 20H1での違いは、平成32年以降の平成の年号は認識されないことです。Windows 10 1903以前では、平成32年以降の平成の年号も認識されます。実際には存在しない年号となりますが、対応する西暦の日付として認識されます。

まとめ

「令和」対応のアップデートを適用することにより、すべてのWindowsでほとんど同じ挙動になりました。

挙動が異なるは「令和」に関することではなく、元号の初年である元年の扱いです。

日付データを日付文字列に変換するAPIでは、Windows 10 1809以前では、元号の初年は「1年」と変換されます。しかし、 Windows 10 1903以降では、元号の初年は「元年」と変換されます。

日付文字列を日付データに変換・認識するAPIでは、「1年」も「元年」も両方とも認識できるようになり、違いがなくなりました。

唯一、挙動の違いがみられたのは、平成32年以降の平成の元号に関する扱いです。

Windows 10 20H1では、平成32年以降の平成の元号は認識されません。しかし、Windows 10 1903以前では、平成32年以降の平成の元号も認識され、対応する西暦の日付として処理されます。

この挙動の違いは注意する必要がありそうです。現時点で、自動車免許証の有効期限などでは、平成32年以降の年号も使われているからです。Windowsのバージョンによっては、日付文字列から日付データへの変換が失敗することがあるということになります。

ただ、Windows 10 20H1は、まだ開発途中のWindowsであるため、開発が完了したときには、他のWindowsと同じ挙動になることは十分にあります。

以上、元号「令和」導入に伴う、Win32 APIに関する投稿でした。


追記

先日リリースされたWindows 10 20H1の新しいビルド18885.1001においても平成32年以降の平成の元号が認識されるようになりました。これで、「平成」、「令和」にかかわる挙動は、すべてのWindowsで同じとなりました。

挙動の違いは、以下の一つのみとなりました。

日付データを日付文字列に変換するAPIでは、Windows 10 1809以前では、元号の初年は「1年」と変換されます。しかし、 Windows 10 1903以降では、元号の初年は「元年」と変換されます。

この違いであれば、大きな問題にあることはなさそうです。

コメントを残す