Windows 10の電卓アプリは日数の計算機能があるが

改元が挟まると表示がおかしくなる？

どうも30年に1回くらいしか発見する機会がないバグを見つけてしまったのかもしれない。

Windows 10付属の電卓アプリには、「日数の計算」という機能があるが、Windowsのカレンダー表示を和暦にして、改元の日を挟んで日数計算すると特定条件下で日付計算を間違う。

最初に筆者は、新元号のテストで発見したのだが、実は新しい元号とは関係なく、昭和と平成の切り替わりタイミングでも同じように計算を間違っていた。和暦にして改元を挟んでテストしないと見つけられないバグなのである。

平成になったのは1989年のことが、このときのWindowsは2.1（ただし日本語版は平成になってから発売）で、Windows 10の付属ソフトウェアとして登場した電卓プログラムは当然存在していなかった。和暦表示が可能なWindowsは、筆者の記憶ではWindows 2000あたりから。Windows NT 4.0でどうだったかは記憶に無いのだが、Windows 2000やXPでは設定した記憶がある。

今年5月から、新しい元号（以下、新元号）になる。Windowsには、すでに複数の元号を扱う機能があるが、肝心の新元号が発表されていないため、現在のWindows 10 Ver.1809では、2019年は年末まで「平成31年」と表示される。

Windowsはアプリケーションに対してさまざまなAPIを提供しているが、日付データを書式指定して人間が読める文字列に変換するのもその1つ。この機能は、現在では西暦だけでなく元号を含む和暦を扱うことができる。

この日付表示機能は、アプリ側が書式のパターンを指定して文字列に変換することもある。イメージ的には、Excelの日付の書式設定のような感じである。ただ、こうした処理はお決まりのパターンもあるので、標準的な形式（長い形式と短い形式がある）で変換した文字列をもらうといったやり方もできる。

単に日付を表示するようなアプリでは、この方法で日付を表す文字列を得るが、同一の日付でもWindows側の設定により違った文字列が来る。たとえば文字列の表示場所を英語の場合で確保しておくと、和暦になったときに文字列がはみ出すといった問題が起きることがある。あるいは、もらった文字列がアルファベットのみと仮定して加工処理してしまい、複数バイト文字の途中で切っちゃうなんてことも起こりえる。

ただし、Windows 10の標準では、日付を西暦で表示するようになっているため、多くのアプリは日付を和暦では表示しない。これは、設定で変更可能だ。

Windows 10でも設定の変更で和暦表示が可能

設定アプリから「時刻と言語」→「地域」→「データ形式を変更する」→「カレンダー」で「和暦」を選択する。

これにより、たとえば、タスクバー右端の時計表示の日付や、カレンダーアプリなどが日付を元号を持つ和暦で表示するように切り替わる。

ただし、アプリによっては、設定後に再度起動しないと切り替わらない場合もある。このことで切り替わるアプリは、WindowsのAPIを利用して日付を表示していることがわかる（切り替わらないからといってWindowsの日付関連の機能を使っていないわけではない）。

デフォルトになっていないのは、たとえば英語圏で「世界のすべてはASCIIコード」と思い込んで作られたアプリケーションなんかが、エラーを起こす可能性があるからだ。

基本的に今のWindowsでは、アプリケーションのエラーがシステムクラッシュを引き起こすことはないため、致命的な問題になることはないが、必ずしも想定通りにいかないのが世の中の常である。