[C# DateTime] 日付を書式指定して文字列に変換する

DateTime構造体に設定した日付を書式を指定して文字列にするにはToStringメソッドを使います。

ToStringメソッドの引数に書式を指定するための文字列をします。
戻り値は書式に基づいて変換された文字列です。

スポンサーリンク

カスタム日付書式指定文字列

1文字以上の書式指定文字を組み合わせて日付を文字列に変換します。

たとえばこんなかんじで書式を指定します。
yyyy/MM/dd HH:mm:ss.fff

yyyyは年を4桁(0001~9999)で表します。
MMは月を01~12で表します。Mにすると1~12と1桁の時先頭0が付きません。
ddは日を01~31で表します。dにすると1から31と1桁の時先頭0が付きません。
HHは時を00~23で表します。Hにすると0~23と1桁の時先頭0が付きません。
mmは分を00~59で表します。mにすると0~59と1桁の時先頭0が付きません。
ssは秒を00~59で表します。sにすると0~59と1桁の時先頭0が付きません。
fffはミリ秒を上位3桁で表します。fff で上位1桁、2桁になります。

区切りで使用している スラッシュ/コロン :ドット.は必要に応じて任意の文字を使用できます。ただ書式指定の文字を区切り文字として使いたい場合は、文字の前に円マーク\を2つ付ける必要があります。

using System;
class Program
{
    public static void Main()
    {
        // 日付データ
        DateTime d = DateTime.Parse("2025/05/22 13:08:05.123");

        // 書式を指定して文字列に変換
        Console.WriteLine($"yyyy/M/d H:m:s      = {d.ToString("yyyy/M/d H:m:s")}");
        Console.WriteLine($"yyyy/MM/dd HH:mm:ss = {d.ToString("yyyy/MM/dd HH:mm:ss")}");
        Console.WriteLine($"yyyy-M-d H:m:s      = {d.ToString("yyyy-M-d H:m:s")}");
        Console.WriteLine($"yyyy-MM-dd HH:mm:ss = {d.ToString("yyyy-MM-dd HH:mm:ss")}");

        // エスケープ文字\\を前に付けると書式指定ではなくただの文字として扱われる
        Console.WriteLine(d.ToString("yyyy\\yMM\\Mdd\\d HH\\h:mm\\m:ss\\s"));
    }
}
yyyy/M/d H:m:s      = 2025/5/22 13:8:5
yyyy/MM/dd HH:mm:ss = 2025/05/22 13:08:05
yyyy-M-d H:m:s      = 2025-5-22 13:8:5
yyyy-MM-dd HH:mm:ss = 2025-05-22 13:08:05
2025y05M22d 13h:08m:05s

そのほかのカスタム書式指定文字

上記の指定文字を含め、こんな書式指定文字があります。
1文字だけカスタム日時形式文字列を使う場合は前に%を付ける必要があります。

using System;
class Program
{
    public static void Main()
    {
        DateTime d = DateTime.Parse("2003/2/5 13:6:7.894");

        Console.WriteLine($"{d:yyyy/MM/dd HH:mm:ss.fff}をフォーマット");
        // y = 年を1桁または2桁(1~12)で表す、年が2桁以上の場合は下2桁が表示される
        Console.WriteLine($"%y   = {d.ToString("%y")}");
        // yy = 年を2桁(01~99)で表す、年が2桁以上の場合は下2桁が表示される
        Console.WriteLine($"yy   = {d.ToString("yy")}");
        // yyy = 年を3桁(001~999)で表す、年が3桁以上の場合はその桁まで表示される
        Console.WriteLine($"yyy  = {d.ToString("yyy")}");
        // yyyy = 年を4桁(0001~9999)で表す
        Console.WriteLine($"yyyy = {d.ToString("yyyy")}");

        // M = 月を1~12で表す
        Console.WriteLine($"%M = {d.ToString("%M")}");
        // MM = 月を01~12で表す
        Console.WriteLine($"MM = {d.ToString("MM")}");

        // d = 日を1~31で表す
        Console.WriteLine($"%d = {d.ToString("%d")}");
        // dd = 日を01~31で表す
        Console.WriteLine($"dd = {d.ToString("dd")}");
        // ddd = 曜日の省略名を表す
        Console.WriteLine($"ddd = {d.ToString("ddd")}");
        // ddd = 曜日の完全名を表す
        Console.WriteLine($"dddd = {d.ToString("dddd")}");

        // h = 時を1~12で表す、午前1時も午後1時も1になるので注意
        Console.WriteLine($"%h = {d.ToString("%h")}");
        // hh = 時を01~12で表す、午前1時も午後1時も01になるので注意
        Console.WriteLine($"hh = {d.ToString("hh")}");

        // H = 時を0~23で表す(24時間表記)
        Console.WriteLine($"%H = {d.ToString("%H")}");
        // HH = 時を00~23で表す(24時間表記)
        Console.WriteLine($"HH = {d.ToString("HH")}");

        // m = 分を0~59で表す
        Console.WriteLine($"%m = {d.ToString("%m")}");
        // mm = 分を00~59で表す
        Console.WriteLine($"mm = {d.ToString("mm")}");

        // s = 秒を0~59で表す
        Console.WriteLine($"%s = {d.ToString("%s")}");
        // ss = 秒を00~59で表す
        Console.WriteLine($"ss = {d.ToString("ss")}");

        // f = ミリ秒の上位1桁を表す
        Console.WriteLine($"%f = {d.ToString("%f")}");
        // ff = ミリ秒の上位2桁を表す
        Console.WriteLine($"ff = {d.ToString("ff")}");
        // fff = ミリ秒の上位3桁を表す
        Console.WriteLine($"fff = {d.ToString("fff")}");

        // F はミリ秒が0以上なら表示
        Console.WriteLine($"%F = {d.ToString("%F")}");
        Console.WriteLine($"FF = {d.ToString("FF")}");
        Console.WriteLine($"FFF = {d.ToString("FFF")}");

        d = new DateTime(3, 2, 5, 13, 6, 7, 0);
        Console.WriteLine("\nミリ秒が0の場合はFは表示されない");
        Console.WriteLine($"%F = {d.ToString("%F")}");
        Console.WriteLine($"FF = {d.ToString("FF")}");
        Console.WriteLine($"FFF = {d.ToString("FFF")}");
    }
}
2003/02/05 13:06:07.894をフォーマット
%y   = 3
yy   = 03
yyy  = 2003
yyyy = 2003
%M = 2
MM = 02
%d = 5
dd = 05
ddd = 水
dddd = 水曜日
%h = 1
hh = 01
%H = 13
HH = 13
%m = 6
mm = 06
%s = 7
ss = 07
%f = 8
ff = 89
fff = 894
%F = 8
FF = 89
FFF = 894

ミリ秒が0の場合はFは表示されない
%F =
FF =
FFF =
スポンサーリンク

標準の日時書式指定文字列

1つの書式指定文字を使用して日付を文字列に変換することができます。

using System;
class Program
{
    public static void Main()
    {
        // 日付データ
        DateTime d = DateTime.Parse("2025/05/22 13:59:59.123");

        // 標準の日時書式指定文字列
        Console.WriteLine("--- 標準の日時書式指定文字列 ---");
        Console.WriteLine($"d = {d.ToString("d")}");
        Console.WriteLine($"D = {d.ToString("D")}");
        Console.WriteLine($"f = {d.ToString("f")}");
        Console.WriteLine($"F = {d.ToString("F")}");
        Console.WriteLine($"g = {d.ToString("g")}");
        Console.WriteLine($"G = {d.ToString("G")}");
        Console.WriteLine($"m = {d.ToString("m")}");
        Console.WriteLine($"o = {d.ToString("o")}");
        Console.WriteLine($"r = {d.ToString("r")}");
        Console.WriteLine($"s = {d.ToString("s")}");
        Console.WriteLine($"t = {d.ToString("t")}");
        Console.WriteLine($"T = {d.ToString("T")}");
        Console.WriteLine($"u = {d.ToString("u")}");
        Console.WriteLine($"U = {d.ToString("U")}");
        Console.WriteLine($"y = {d.ToString("y")}");
    }
}
--- 標準の日時書式指定文字列 ---
d = 2025/05/22
D = 2025年5月22日
f = 2025年5月22日 13:59
F = 2025年5月22日 13:59:59
g = 2025/05/22 13:59
G = 2025/05/22 13:59:59
m = 5月22日
o = 2025-05-22T13:59:59.1230000
r = Thu, 22 May 2025 13:59:59 GMT
s = 2025-05-22T13:59:59
t = 13:59
T = 13:59:59
u = 2025-05-22 13:59:59Z
U = 2025年5月22日 4:59:59
y = 2025年5月
スポンサーリンク

日付を和暦に変換する

日付を和暦に変換するのはこんな感じです。

using System;
class Program
{
    public static void Main()
    {
        // 和歴にするには日本のカレンダーを設定する必要がある
        var ci = new System.Globalization.CultureInfo("ja-JP", false);
        ci.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar();

        // ToStringメソッドの第2引数にカレンダーを指定すると和暦に変換される
        // 書式にgを指定すると年号を表示することができる
        DateTime d1 = DateTime.Parse("2003/2/5 13:6:7.894");
        Console.WriteLine($"gyy年MM月dd日 HH時mm分ss秒 = {d1.ToString("gyy年MM月dd日 HH時mm分ss秒", ci)}");

        DateTime d2 = DateTime.Parse("2020/5/25 13:6:7.894");
        Console.WriteLine($"gyy年MM月dd日 HH時mm分ss秒 = {d2.ToString("gyy年MM月dd日 HH時mm分ss秒", ci)}");
    }
}
gyy年MM月dd日 HH時mm分ss秒 = 平成15年02月05日 13時06分07秒
gyy年MM月dd日 HH時mm分ss秒 = 令和02年05月25日 13時06分07秒

C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました