LoginSignup
4
1

More than 3 years have passed since last update.

和暦環境で、西暦の yyyy/MM/dd を .NET Framework で

Last updated at Posted at 2019-06-05

Windows は、和暦表示に設定することができます。

image.png

タスクバーが和暦表示になりました!

image.png

ここで 1 つ問題になるのが…
.NET Framework での日付の文字列化です。

using System;

namespace ConsoleApp18
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd"));
        }
    }
}

実行結果

01/06/05
続行するには何かキーを押してください . . .

これ固定で西暦になると思っていたら、ならないのです…

C 言語の strftime のように、%Y 世紀部分を含めた ( 4 桁の) 西暦年。 と明示されていれば良いのですが…
.NET Framework の "yyyy" カスタム書式指定子 には とだけ書いてあります。

ここでは西暦年を表示するための書き換え案だけ、記録のために残していきます。

Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd"));
// ↓
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture));
Console.WriteLine(string.Format("{0:yyyy/MM/dd}", DateTime.Now));
// ↓
Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0:yyyy/MM/dd}", DateTime.Now));
Console.WriteLine($"{DateTime.Now:yyyy/MM/dd}");
// ↓
Console.WriteLine(((IFormattable)$"{DateTime.Now:yyyy/MM/dd}").ToString(null, CultureInfo.InvariantCulture));

個別にではなく、アプリケーション全体に西暦を適用したい場合

    var ja = new CultureInfo("ja-JP", true);
    ja.DateTimeFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.Localized);

    Thread.CurrentThread.CurrentCulture = ja;

参考: 日付の年号を略称で表示するには?[C#、VB]

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