LoginSignup
6
1

More than 5 years have passed since last update.

2019年2月13日 Windows 10 Windows Updateに関する元号合字に関する不具合について

Last updated at Posted at 2019-02-22

概要

2019年2月13日の更新で和暦関連のレジストリに合字が入ったことなどで、不具合が出たとの報道、Qiitaでのエントリが上がっている。

こちらに関して、文字列のパースに関する不具合 とは具体的にどのような不具合であるかが不明だったので、検証した。

追記

2019年2月19日 不具合修正版(オプションのため自動適用はされない。Microsoft Updateよりダウンロード)が公開された。Windows 10は、1803、1709が対象で、1809はまだ出ていない。この修正版を踏まえた検証結果は1809対応版がリリースされたら、別途記載する。

2月のパッチでWindowsの元号処理や仮想マシンの復元に問題 ~Microsoftが修正版を公開 | 窓の杜
https://forest.watch.impress.co.jp/docs/news/1170691.html

環境

  • Windows 10 Professional x64 1809 (OSビルド 17763.316)
  • Visual Studio 2017 Version 15.7.5
  • アプリケーションターゲットフレームワーク .NET Framework 4.5.2

2019年2月13日の更新

レジストリ

コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras

無題.png

文字列 → Datetime

Parseメソッド

Dim c As CultureInfo = New CultureInfo("ja-JP", True)
c.DateTimeFormat.Calendar = New JapaneseCalendar()

Dim s = (和暦文字列)
Dim d As Date = DateTime.Parse(s, c)
Debug.Print($"{d}")
2019年2月13日の合字レジストリで確認
和暦文字列 変換結果
平成12年12月12日 2000/12/12 0:00:00
平12年12月12日 System.FormatException: '文字列は有効な DateTime として認識されませんでした。インデックス 0 から始まる位置に不明な単語があります。'
㍻12年12月12日 2000/12/12 0:00:00
H12年12月12日 2000/12/12 0:00:00
平12/12/12 System.FormatException: '文字列は有効な DateTime として認識されませんでした。インデックス 0 から始まる位置に不明な単語があります。'
㍻12/12/12 2000/12/12 0:00:00
H12/12/12 2000/12/12 0:00:00

ParseExactメソッド

Dim c As CultureInfo = New CultureInfo("ja-JP", True)
c.DateTimeFormat.Calendar = New JapaneseCalendar()

Dim s = (和暦文字列)
Dim d As Date = DateTime.ParseExact(s, (形式指定子), c)
Debug.Print($"{d}")
2019年2月13日の合字レジストリで確認
和暦文字列 形式指定子 変換結果
平成12年12月12日 gyy年MM月dd日 2000/12/12 0:00:00
平12年12月12日 gyy年MM月dd日 System.FormatException: '文字列は有効な DateTime ではありませんでした。'
㍻12年12月12日 gyy年MM月dd日 2000/12/12 0:00:00
2019年2月13日のレジストリを以前の状態に変更して確認
和暦文字列 形式指定子 変換結果
平成12年12月12日 gyy年MM月dd日 2000/12/12 0:00:00
平12年12月12日 gyy年MM月dd日 2000/12/12 0:00:00
㍻12年12月12日 gyy年MM月dd日 System.FormatException: '文字列は有効な DateTime ではありませんでした。'

Datetime → 文字列

ToStringメソッド

Dim c As CultureInfo = New CultureInfo("ja-JP", True)
c.DateTimeFormat.Calendar = New JapaneseCalendar()

Dim d = New Date(2000, 12, 12)
Dim s = d.ToString(形式指定子), c)
Debug.Print($"{s}")
2019年2月13日の合字レジストリで確認
DateTime 形式指定子 変換結果
2000/12/12 gyy年MM月dd日 平成12年12月12日

GetAbbreviatedEraNameメソッド

Dim c As CultureInfo = New CultureInfo("ja-JP", True)
c.DateTimeFormat.Calendar = New JapaneseCalendar()

Dim era = c.DateTimeFormat.Calendar.GetEra(d)
Dim s = c.DateTimeFormat.GetAbbreviatedEraName(era)
Debug.Print($"{s}")
2019年2月13日の合字レジストリで確認
DateTime 変換結果
2000/12/12
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1