C# Datetime日付操作方法まとめ
現在日時を取得する(Now)
DateTime構造体のNowプロパティで現在日時を取得することができます。
using System;
class Program
{
public static void Main()
{
DateTime date = DateTime.Now;
Console.WriteLine(date);
}
}
2025/04/21 19:31:55
年だけ、時だけなどを取得したい場合はそれぞれのプロパティを使います。
using System;
class Program
{
public static void Main()
{
DateTime date = DateTime.Now;
Console.WriteLine(date);
Console.WriteLine($"年:{date.Year}");
Console.WriteLine($"月:{date.Month}");
Console.WriteLine($"日:{date.Day}");
Console.WriteLine($"時:{date.Hour}");
Console.WriteLine($"分:{date.Minute}");
Console.WriteLine($"秒:{date.Second}");
Console.WriteLine($"ミリ秒:{date.Millisecond}");
}
}
2025/04/21 19:34:35
年:2025
月:4
日:21
時:19
分:34
秒:35
ミリ秒:980
現在日付を取得する(Today)
DateTime構造体のTodayプロパティで現在日付を取得することができます。
時刻部分は00:00:00になります。
using System;
class Program
{
public static void Main()
{
DateTime date = DateTime.Today;
Console.WriteLine(date);
Console.WriteLine($"年:{date.Year}");
Console.WriteLine($"月:{date.Month}");
Console.WriteLine($"日:{date.Day}");
Console.WriteLine($"時:{date.Hour}");
Console.WriteLine($"分:{date.Minute}");
Console.WriteLine($"秒:{date.Second}");
Console.WriteLine($"ミリ秒:{date.Millisecond}");
}
}
2025/04/21 0:00:00
年:2025
月:4
日:21
時:0
分:0
秒:0
ミリ秒:0
等値、比較演算子で日付を判定する
DateTime構造体は等値演算子(== 、!=)、比較演算子(< <= > >=)を使ってDateTime同士の判定をすることができます。
演算子 | 説明 | 判定結果 |
---|---|---|
== | 左の日時と右の日時が同じかどうか判定する | 同じ場合にTrue、異なる場合にFalse |
!= | 左の日時と右の日時が異なるかどうか判定する | 異なる場合にTrue、同じ場合にFalse |
< | 左の日時が右の日時より過去かどうか判定する | 過去の場合にTrue、それ以外の場合はFalse |
<= | 左の日時が右の日時と同じまたは過去かどうか判定する | 同じまたは過去の場合にTrue、それ以外の場合はFalse |
> | 左の日時が右の日時より未来かどうか判定する | 未来の場合にTrue、それ以外の場合はFalse |
>= | 左の日時が右の日時と同じまたは未来かどうか判定する | 同じまたは未来の場合にTrue、それ以外の場合はFalse |
using System;
class Program
{
public static void Main()
{
DateTime date1 = DateTime.Parse("2020/05/01 12:30:15");
DateTime date2 = DateTime.Parse("2020/05/01 12:30:15");
DateTime date3 = DateTime.Parse("2020/05/02 14:33:20");
Console.WriteLine($"date1 = {date1}");
Console.WriteLine($"date2 = {date2}");
Console.WriteLine($"date3 = {date3}");
// 2つの日時が同じかどうか判定
Console.WriteLine($"(date1 == date2) = {date1 == date2}");
Console.WriteLine($"(date1 == date3) = {date1 == date3}");
// 2つの日時が異なるか判定
Console.WriteLine($"(date1 != date2) = {date1 != date2}");
Console.WriteLine($"(date1 != date3) = {date1 != date3}");
// 左の日時が右の日時より過去日時か判定
Console.WriteLine($"(date1 < date2) = {date1 < date2}");
Console.WriteLine($"(date1 < date3) = {date1 < date3}");
// 左の日時が右の日時と同じまたは過去日時か判定
Console.WriteLine($"(date1 <= date2) = {date1 <= date2}");
Console.WriteLine($"(date1 <= date3) = {date1 <= date3}");
// 左の日時が右の日時より未来日時か判定
Console.WriteLine($"(date1 > date2) = {date1 > date2}");
Console.WriteLine($"(date1 > date3) = {date1 > date3}");
// 左の日時が右の日時と同じまたは未来日時か判定
Console.WriteLine($"(date1 >= date2) = {date1 >= date2}");
Console.WriteLine($"(date1 >= date3) = {date1 >= date3}");
}
}
date1 = 2020/05/01 12:30:15
date2 = 2020/05/01 12:30:15
date3 = 2020/05/02 14:33:20
(date1 == date2) = True
(date1 == date3) = False
(date1 != date2) = False
(date1 != date3) = True
(date1 < date2) = False
(date1 < date3) = True
(date1 <= date2) = True
(date1 <= date3) = True
(date1 > date2) = False
(date1 > date3) = False
(date1 >= date2) = True
(date1 >= date3) = False
文字列で書かれた日付を日付型に変換する
文字列で書かれた日付を日付型(DateTime)に変換するにはDateTime.Parseメソッドを使います。
Parseメソッドの引数には文字列で書かれた日付を指定します。
using System;
class Program
{
public static void Main()
{
// 文字列の日付を日付型に変換する
DateTime date1 = DateTime.Parse("2020/05");
DateTime date2 = DateTime.Parse("2020/05/10");
DateTime date3 = DateTime.Parse("2020/05/10 18:30:10");
DateTime date4 = DateTime.Parse("2020/05/10 18:30:10.123");
DateTime date5 = DateTime.Parse("18:30:10");
// 結果表示用メソッド
string outputDate(DateTime date) => $"Year={date.Year}, Month={date.Month}, Day={date.Day}, Hour={date.Hour}, Minute={date.Minute}, Second={date.Second}, MiliSecond={date.Millisecond}";
// 結果の表示
Console.WriteLine($"{outputDate(date1)}");
Console.WriteLine($"{outputDate(date2)}");
Console.WriteLine($"{outputDate(date3)}");
Console.WriteLine($"{outputDate(date4)}");
Console.WriteLine($"{outputDate(date5)}");
}
}
Year=2020, Month=5, Day=1, Hour=0, Minute=0, Second=0, MiliSecond=0
Year=2020, Month=5, Day=10, Hour=0, Minute=0, Second=0, MiliSecond=0
Year=2020, Month=5, Day=10, Hour=18, Minute=30, Second=10, MiliSecond=0
Year=2020, Month=5, Day=10, Hour=18, Minute=30, Second=10, MiliSecond=123
Year=2020, Month=5, Day=25, Hour=18, Minute=30, Second=10, MiliSecond=0
日の指定がない場合、1日が設定されます。
時間の指定がない場合、0時0分0秒になります。
時間だけを指定した場合、現在の日付になります。
Parseメソッドは日付に変換できない文字列が指定された場合エラーになります。
変換できるかどうか判定するにはDateTime.TryParseメソッドを使います。
文字列が日付に変換できるか判定する(TryParse)
TryParseメソッドの第1引数に文字列で書かれた日付、第2引数には文字列から変換した日付を格納する変数(DateTime型)をoutで指定します。
戻り値は日付に変換できる場合にTrue、できない場合にFalseが返されます。
using System;
class Program
{
public static void Main()
{
// 結果の表示用メソッド
string outputDate(DateTime date) => $"Year={date.Year}, Month={date.Month}, Day={date.Day}, Hour={date.Hour}, Minute={date.Minute}, Second={date.Second}, MiliSecond={date.Millisecond}";
// TryParseメソッドで日付に変換できるか判定
string strDate1 = "2020-05-30 13:14:15";
if (DateTime.TryParse(strDate1, out var date1))
{
// 日付に変換できた
Console.WriteLine($"「{strDate1}」は日付に変換できます。");
Console.WriteLine($"変換した日付={outputDate(date1)}");
}
else
{
// 日付に変換できなかった
Console.WriteLine($"「{strDate1}」は日付に変換できません。");
}
string strDate2 = "abcdef";
if (DateTime.TryParse(strDate2, out var date2))
{
Console.WriteLine($"「{strDate2}」は日付に変換できます。");
Console.WriteLine($"変換した日付={outputDate(date2)}");
}
else
{
Console.WriteLine($"「{strDate2}」は日付に変換できません。");
}
}
}
「2020-05-30 13:14:15」は日付に変換できます。
変換した日付=Year=2020, Month=5, Day=30, Hour=13, Minute=14, Second=15, MiliSecond=0
「abcdef」は日付に変換できません。
日付型の値を書式指定して文字列に変換する
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桁で表します。f、ff で上位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秒
日付の加算、減算
年、月、日、時、分、秒、ミリ秒それぞれに加算用のメソッドがあります。
それぞれのメソッドの引数には加算、減算する数値を指定します。マイナスを指定すると減算になります。
どのメソッドも戻り値が加算された日付です。元の日付は変わりません。
AddDays(40) とかやれば一か月以上さきの日付にすることができます。
using System;
class Program
{
public static void Main()
{
DateTime date = DateTime.Now;
// それぞれのメソッドを使って加算
Console.WriteLine($"元の日付 :{date}");
Console.WriteLine($"AddYears :{date.AddYears(2)}");
Console.WriteLine($"AddMonths :{date.AddMonths(2)}");
Console.WriteLine($"AddDays :{date.AddDays(2)}");
Console.WriteLine($"AddHours :{date.AddHours(2)}");
Console.WriteLine($"AddMinutes:{date.AddMinutes(2)}");
Console.WriteLine($"AddSeconds:{date.AddSeconds(2)}");
// それぞれのメソッドを使って減算
Console.WriteLine($"元の日付 :{date}");
Console.WriteLine($"AddYears :{date.AddYears(-2)}");
Console.WriteLine($"AddMonths :{date.AddMonths(-2)}");
Console.WriteLine($"AddDays :{date.AddDays(-2)}");
Console.WriteLine($"AddHours :{date.AddHours(-2)}");
Console.WriteLine($"AddMinutes:{date.AddMinutes(-2)}");
Console.WriteLine($"AddSeconds:{date.AddSeconds(-2)}");
}
}
元の日付 :2020/04/21 22:12:07
AddYears :2022/04/21 22:12:07
AddMonths :2020/06/21 22:12:07
AddDays :2020/04/23 22:12:07
AddHours :2020/04/22 0:12:07
AddMinutes:2020/04/21 22:14:07
AddSeconds:2020/04/21 22:12:09
元の日付 :2020/04/21 22:12:07
AddYears :2018/04/21 22:12:07
AddMonths :2020/02/21 22:12:07
AddDays :2020/04/19 22:12:07
AddHours :2020/04/21 20:12:07
AddMinutes:2020/04/21 22:10:07
AddSeconds:2020/04/21 22:12:05
演算子を使った日付の計算
こちらの記事にまとめました。
