1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

元号表記の変更について

Last updated at Posted at 2019-04-23

#元号表記の変更について
間もなく新元号になりますね。Microsoftの新元号パッチもまだ配信されておらず、最悪GW明けになる可能性もありますが・・・

さて、新元号パッチはともかく和暦表示をするシステムも沢山あるかと思います。通常であれば2019/5以降を和暦表示すると「令和●●年~」となると思いがちですが、昨年10月の月例パッチ頃より「和暦1年」が「和暦年」と表示されるようになっております。

2018 年 10 月 19 日 — KB4462932 (OS ビルド 16299.755)
日本語の日付書式のうち、元号の最初の年に関する .NET Framework のサポートを更新します。 書式パターンが “y年” の場合、年の書式には元号が使用され、年番号 1 は使用されません。 さらに、.NET Framework は元号を含む日付をサポートします。

##「元年」で表示される条件
和暦表示で「和暦1年」ではなく「和暦元年」になるのは以下の条件を全て満たしている場合です。

  • 和暦の書式(ggy等)又は「y」のみの年書式
  • 年書式の後に「年」が来る
  • 「和暦の1年」となる日付

この条件に満たない場合、「元」ではなく「1」で表示されます。

2019 年 4 月 3 日 — KB4489192 Windows 10 Version 1809 および Windows Server 2019 用の .NET Framework 3.5 および 4.7.2 の累積的な更新プログラム
.NET Framework 用の日本の新元号対応更新プログラムの概要

KB4489192のパッチが適用されていない場合、「年」をシングルコート「'」でくくる必要があります。その為、開発環境と実行環境で結果が異なる可能性がある点に注意してください。

##元号を使用するシステムで確認しなければならない点
まず確認しなければならない点は

  • システムで「元年」を表示するか否か

です。表示する場合は元年に当たる日付により、結果がどうかの確認と修正が必要になります。

必要が無い場合の対応は簡単でApp.Configで「Switch.System.Globalization.FormatJapaneseFirstYearAsANumber」を「True」に設定します。

App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Globalization.FormatJapaneseFirstYearAsANumber=True" />
  </runtime>
</configuration>

##「元年」を使用する場合の注意点
例えば和暦の年を取得し数値の大小等で比較していたり、和暦の年をInteger変数へ代入していたりすると動作が異なってきます。

##元年表示参考用PG
最後に元年表示のサンプルPGをあげておきます。
コンソールアプリプロジェクトを作成し、下記ソースを適用・実行してください。

Module1.vb
Imports System.Globalization

Module Module1
    Sub Main()
        Dim jpCulture = New CultureInfo("ja-JP")
        jpCulture.DateTimeFormat.Calendar = New JapaneseCalendar()

        Dim dt As New Date(1989, 1, 8)
        Console.WriteLine(dt.ToString("〇ggy年M月d日", jpCulture))
        Console.WriteLine(dt.ToString("〇gg y年M月d日", jpCulture))
        Console.WriteLine(dt.ToString("〇y年M月d日", jpCulture))
        Console.WriteLine(dt.ToString("×ggy 年M月d日 ⇒ 年書式と「年」の間に空白がある", jpCulture))
        Console.WriteLine(dt.ToString("×ggy.M.d ⇒ 年書式の後ろが「年」ではない", jpCulture))

        Console.WriteLine()
        Console.WriteLine("Push key...")
        Console.ReadLine()
    End Sub
End Module
1
2
1

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?