さて、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ツール (和暦テストツール)を使います。
このテストツールは、このページの「ダウンロード&変更内容」の項目からダウンロードできます。
このツールの使い方の説明は、1.0.0のダウンロードページに記載してあります。
Windows の「令和」への対応状況(2019年5月2日時点)
前回の投稿では、Window 10 1903/1809では残念な結果になりました。しかし、その後、5月2日に対応状況が更新されました。
マイクロソフトの公式発表では以下の通りの対応状況です。2019年5月2日時点の情報です。
日本の元号変更に関する Windows の更新プログラムについて – KB4469068
最新の更新プログラム
サポート技術情報の記事 | Windows のバージョン |
サポート技術情報 4501835 | 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 10 1809が「近日公開予定」から、「KB4501835」に更新されました。これに連動して、Windows 10 1903にも「令和」に対応したものと思われる「KB4497093」が全ユーザー向けにリリースされました。
これで、すべてのWindowsで「令和」対応のアップデートがリリースされたことになります。Windows 10 20H1には、公式なアナウンスがないので、「令和」への対応状況は、実際の振る舞いで確認したいと思います。
動作確認結果
日付データから日付文字列への変換
KB4469068相当が未適用
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Windows 8.1 | Windows 7 SP1 |
OSビルド | 18875.1000 | 18362.53 | 17763.1 | 17134.706 | 9600 | 7601 |
選択した日付 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 |
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日以前の場合)
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Windows 8.1 | Windows 7 |
OSビルド | 18875.1000 | 18362.86 | 17763.439 | 17134.753 | 9600 | 7601 |
選択した日付 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 |
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日以降の場合)
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Windows 8.1 | Windows 7 |
OSビルド | 18875.1000 | 18362.86 | 17763.439 | 17134.753 | 9600 | 7601 |
選択した日付 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 | 変換された 日付文字列 |
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相当が未適用
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Window 8.1 | Windows 7 SP1 |
OSビルド | 18875.1000 | 18362.53 | 17763.1 | 17134.706 | 9600 | 7601 |
入力した 日付文字列 | 認識された日付データ(西暦(元号)) | |||||
昭和元年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) | 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日以前の場合)
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Windows 8.1 | Windows 7 SP1 | |
OSビルド | 18875.1000 | 18362.86 | 17763.439 | 17134.753 | 9600 | 7601 | |
入力した 日付文字列 | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | |
昭和元年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日 | 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日以降の場合)
Windows | Windows 10 20H1 | Windows 10 1903 | Windows 10 1809 | Windows 10 1803 | Windows 8.1 | Windows 7 SP1 | |
OSビルド | 18875.1000 | 18362.86 | 17763.437 | 17134.753 | 9600 | 7601 | |
入力した 日付文字列 | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | 認識された 日付データ (西暦(元号)) | |
昭和元年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 (令和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以降では、元号の初年は「元年」と変換されます。
この違いであれば、大きな問題にあることはなさそうです。