このページの本文へ

前へ 1 2 次へ

Windows Info第168回

.NET Frameworkにおける新元号「令和」への対応

2019年04月14日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

改元がある10連休の突入まで、すでに2週間を切った

 改元に対応するWindows 10のアップデートでは、.NET Frameworkでも更新が実施される。なぜ、.NET Frameworkでの更新が必要かといえば、1つには、.NET Frameworkが日付情報を扱う機能(API)を持っているからである。もう1つは、今回の改元にあたって、Windowsにおいて和暦の「1年」を「元年」と表示する機能が追加される。これにも対応する必要があるのだ。

 さらに、.NET FrameworkはUnicode関連のさまざまな機能を持っている。実は、Win32 API側には、Unicodeの処理で必要となるような機能がほとんど装備されていない。Windowsはもともと、シフトJISやASCIIなどのシングルバイト文字を前提にシステムが作られ、あとから内部をUnicode対応にしている。

 これに対して、.NET Frameworkは最初からUnicodeの正規化などの機能を装備している。こうした機能は、そもそもUnicodeという文字の定義に対応している必要がある。このため、令和の合字などの文字の追加にはあらためての対応が求められる。

 さて、Windows 10の元号関連の機能については、この連載でも以前に扱った(「改元絡みでWindows 10の電卓アプリがバグってました」)。

 このときは、レジストリを設定すれば、Windows 10は新元号を扱えるようになると解説している。Windows 10は西暦のみならず、さまざまな暦に対応する機能があり、それを使って和暦表示も可能になっている。このため、新しい元号の情報をレジストリに設定すれば、令和を表示できるようになるわけだ。しかし、実際にはこれだけではダメなのである。

 令和への対応は、4月中に配布される予定の「令和」アップデートとでも言うべきものをWindowsに適用する必要がある。記事執筆時点では配布がなかったので、今後配布されるはずだが、10連休までは2週間も残されていない。

 筆者は日本の仕組みについて不満があるわけではないが、元号が変わるような「重要なイベント」の前後を「連休」にするという政治家のスタンスについては文句がある。大体、連休が増えて国民が喜んでいたのは、休みの少なかった週休2日制以前のこと。リアル店舗は24時間営業、インターネットに休みなし、そういう時代に「連休」で世の中を止めてしまうことにどんな意味があるのか、政治家には理解できていないのだろう。そもそも、連休が増えてうれしいのは、国会が休みになり、地元に戻って選挙に向けた活動ができる政治家ではないだろうか。

.NET Frameworkの元号対応を確認する

 では、.NET Frameworkの令和対応を見てみることにしよう。事前準備として、前述の記事にある方法で、レジストリに「令和」を設定しておいた。ただし元年表示に関しては設定していない。また、日付の表示に「和暦」が使われるように「設定」→「時刻と言語」→「日付と時刻」→「日付、時刻、地域の書式設定」→「データ形式を変更する」→「カレンダー」で「和暦」を選択した。

 .NET Frameworkのテストには、PowerShellを使った。まずは、日付の表示。Powershellを起動して「get-date」と入れてみる。これは、現在の日付を取得するPowerShellのコマンドレットである。すると、5月1日前ならば「平成31年」、5月1日以降なら「令和1年」と表示されるはずだ。

 では、「元年」表示機能を見てみよう。マイクロソフトによれば、.NET Frameworkの元年表示機能は、Windows 10 Ver.1809(RS5)でもデフォルトでオンになっているという。では、書式を指定して2019年5月1日を表示させてみる。この場合は、

get-date -year 2019 -month 5 -day 1

のように日付を指定する。

.NET Frameworkでは元年表示がデフォルトでオンになっている。このため、デフォルトの書式で表示させると元年表示となるが、書式指定方法によっては元年と表示しない

 -dateオプションを使うときには和暦の文字列で指定する必要がある。たとえば、2019年5月1日なら’1/5/1’のようにする。西暦を入れてしまうと「令和2019年」と解釈されてしまうので注意されたい(一瞬バグってるのかと思った)。

 前記のコマンドを打ち込むと「令和元年5月1日」と表示されるはずだ。これは書式指定をしないので、デフォルトの形式が採用され、.NET Frameworkでは、元年表示が有効であるため、「令和元年」となったものだ。たとえば、書式を"ggyy年MM月dd日"と指定すると「令和01年05月01日」と表示されるはずだ。

 このように「元年」機能が有効であっても、書式指定と合わない(この書式指定では年を数字2桁と指定してある)場合には、元年は表示されない。"ggy'年'MM月dd日"と指定すれば、「令和元年05月01日」と表示されるようになる。

 UWPである、Windows 10付属の電卓アプリやカレンダーアプリは、レジストリ設定で「元年」を表示するかどうかを制御しているが、.NET Framework自体は、レジストリ設定の影響を受けない。

前へ 1 2 次へ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン