プログラミングを試してみたい人向けのC#プログラミングチュートリアル

日付から文字列、文字列から日付の変換

POINT
  • 日付から文字列への変換方法
  • 文字列から日付への変換方法
目次

日付から文字列への変換

日付から文字列への変換はToString()を使用します。
引数として変換するフォーマットを指定します。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.DateTime dt = System.DateTime.Now;   // 現在の日時
        string s = dt.ToString();

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
2024/04/04 14:27:05

サンプルプログラムの実行方法はトップページを参照してください。

書式を指定した変換

ToString()のカッコ内に書式を指定することで、色々な変換をすることができます。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.DateTime dt = System.DateTime.Now;   // 現在の日時
        string s = dt.ToString("yyyy/MM/dd HH:mm:ss");
        System.Console.WriteLine(s);
        
        s = dt.ToString("yyyy/MM/dd(ddd)");
        System.Console.WriteLine(s);
        
        s = dt.ToString("yyyy年MM月dd日(dddd)");
        System.Console.WriteLine(s);

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
2024/04/04 14:29:43
2024/04/04(木)
2024年04月04日(木曜日)

フォーマットの指定には、下記の指定ができます。

指定文字 内容 補足
y yが並んだ個数分表示
M 二つ並べると左0埋め
d 二つ並べると左0埋め
H 時間 二つ並べると左0埋め
m 二つ並べると左0埋め
s 二つ並べると左0埋め
f ミリ秒 並べると最大7個の1/10000000まで詳細表示
F ミリ秒 0以外の場合に表示、並べると最大7個まで詳細表示
ddd 曜日 省略名
dddd 曜日 正式名

和暦の変換

和暦へ変換する場合は、カレンダーを指定する必要があります。
カレンダーを指定したうえで、gまたはggを指定すると和暦に変換されます。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.DateTime dt = System.DateTime.Now;   // 現在の日時
        
        var cultureJp = new System.Globalization.CultureInfo("ja-jp", false);
        cultureJp.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar();
        string s = dt.ToString("gy年MM月dd日(dddd)", cultureJp);
        System.Console.WriteLine(s);

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
令和6年04月04日(木曜日)

曜日を取得

曜日は値として取得することもできます。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.DateTime dt = System.DateTime.Now;   // 現在の日時
        
        System.DayOfWeek week = dt.DayOfWeek;
        if (week == System.DayOfWeek.Sunday)
        {
            System.Console.WriteLine("日曜日です。");
        }
        else if (week == System.DayOfWeek.Monday)
        {
            System.Console.WriteLine("月曜日です。");
        }
        else if (week == System.DayOfWeek.Tuesday)
        {
            System.Console.WriteLine("火曜日です。");
        }
        else if (week == System.DayOfWeek.Wednesday)
        {
            System.Console.WriteLine("水曜日です。");
        }
        else if (week == System.DayOfWeek.Thursday)
        {
            System.Console.WriteLine("木曜日です。");
        }
        else if (week == System.DayOfWeek.Friday)
        {
            System.Console.WriteLine("金曜日です。");
        }
        else if (week == System.DayOfWeek.Saturday)
        {
            System.Console.WriteLine("土曜日です。");
        }
        
        // intに変換して値を確認
        System.Console.WriteLine((int)week);

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
木曜日です。
4

DayOfWeekの内容は(int)を付けて数値としてみると、日曜日の1から始まって土曜日が6になる数値になります。

文字列から日付への変換

文字列から日付への変換は、System.DataTime.Parse(文字列)を使用します。
フォーマットを指定した変換を行う場合は、System.DataTime.ParseExact(文字列, フォーマット, カルチャ情報)を使用します。
カルチャ情報の部分は前述の和暦を使うような場合に指定が必要ですが、通常nullでも問題ありません。
引数として変換するフォーマットを指定します。

サンプルプログラム
class Program
{
    static void Main()
    {
        string s = "2024/01/02 15:04:55";
        System.DateTime dt = System.DateTime.Parse(s);
        System.Console.WriteLine(dt.ToString());
        
        s = "20240607080910";
        string format = "yyyyMMddHHmmss";
        dt = System.DateTime.ParseExact(s, format, null);
        System.Console.WriteLine(dt.ToString());

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
2024/01/02 15:04:55
2024/06/07 8:09:10

日付の変換チェック

Parse、ParseExactを実行した際、変換できない場合はエラーが発生します。
変換エラーを防ぐためには、TryParse、TryParseExactを使用します。

サンプルプログラム
class Program
{
    static void Main()
    {
        string s = "2024/13/02 15:04:55";
        System.DateTime dt;
        if (System.DateTime.TryParse(s, out dt))
        {
            System.Console.WriteLine(dt.ToString());
        } else {
            System.Console.WriteLine(s+" は変換できない値です");
        }
        s = "2024/12/02 15:04:55";
        if (System.DateTime.TryParse(s, out dt))
        {
            System.Console.WriteLine(dt.ToString());
        } else {
            System.Console.WriteLine(s+" は変換できない値です");
        }

        s = "20240699080910";
        string format = "yyyyMMddHHmmss";
        if (System.DateTime.TryParseExact(s, format, null, 
            System.Globalization.DateTimeStyles.None, out dt))
        {
            System.Console.WriteLine(dt.ToString());
        } else {
            System.Console.WriteLine(s+" は変換できない値です");
        }
        s = "20240607080910";
        if (System.DateTime.TryParseExact(s, format, null, 
            System.Globalization.DateTimeStyles.None, out dt))
        {
            System.Console.WriteLine(dt.ToString());
        } else {
            System.Console.WriteLine(s+" は変換できない値です");
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
2024/13/02 15:04:55 は変換できない値です
2024/12/02 15:04:55
20240699080910 は変換できない値です
2024/06/07 8:09:10

基本的には数値型のTryParseと同じ使い方になります。
最後の引数として、変換が成功した場合に値を入れる変数をoutを付けて指定します。
TryParseExactの方は、ParseExact使用時と同じ引数に加えてDateTimeStylesを指定する必要があります。
基本的にはSystem.Globalization.DateTimeStyles.Noneを指定すれば問題ありません。

月初/月末を取得

月初と月末を取得する方法をご紹介します。
月初は、対象となる年月と日付を1固定にして日付変換して取得します。
月末は、DateTime.DaysInMonthを使用することで該当月の最終日が取得できるので、対象となる年月と取得した最終日を指定して日付変換します。

サンプルプログラム
class Program
{
    static void Main()
    {
        string s = "2024/02/15";
        System.DateTime dt = System.DateTime.Parse(s);
        
        // 月初
        System.DateTime firstDayOfMonth = new System.DateTime(dt.Year, dt.Month, 1);
        System.Console.WriteLine(firstDayOfMonth.ToString());
        
        // 月末
        int lastday = System.DateTime.DaysInMonth(dt.Year, dt.Month);
        System.DateTime lastDayOfMonth = new System.DateTime(dt.Year, dt.Month, lastday);
        System.Console.WriteLine(lastDayOfMonth.ToString());

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
2024/02/01 0:00:00
2024/02/29 0:00:00