C#で現在日付を取得する方法|DateTime.Now・Todayの違いとフォーマット例
はじめに
C#で現在日付を取得したい場合、基本的にはDateTime.NowまたはDateTime.Todayを使います。
たとえば、今日の日付を画面に表示したい、ログに現在日時を出力したい、ファイル名に日付を付けたい、期限日と今日を比較したいといった場面でよく使われます。
ただし、DateTime.NowとDateTime.Todayは似ていますが、返される値には明確な違いがあります。特に「日付だけを扱いたい」のか「時刻も含めた現在日時を扱いたい」のかによって、使うべきコードが変わります。
この記事では、C#で現在日付を取得する基本から、DateTime.NowとDateTime.Todayの違い、フォーマット方法、日付比較、UTCやタイムゾーンを考慮する場合の注意点まで、実用的なコード例とあわせて解説します。
1. C#で現在日付を取得する基本
1-1. 現在日付の取得にはDateTime.Now・DateTime.Todayを使う
C#で現在日付を取得する代表的な方法は、次の2つです。
C#DateTime now = DateTime.Now;
DateTime today = DateTime.Today;
DateTime.Nowは、現在の日付と時刻を取得します。
一方、DateTime.Todayは、今日の日付を取得し、時刻部分は00:00:00になります。
つまり、現在時刻まで必要な場合はDateTime.Now、今日の日付だけを扱いたい場合はDateTime.Todayを使うのが基本です。
1-2. DateTime.Nowで現在の日付と時刻を取得する
DateTime.Nowを使うと、実行時点の現在日時を取得できます。
C#DateTime now = DateTime.Now;
Console.WriteLine(now);
出力例は次のようになります。
2026/06/18 14:35:20
実際の表示形式は、実行環境のカルチャ設定やOSの設定によって変わる場合があります。
DateTime.Nowには、年、月、日、時、分、秒などの情報が含まれます。そのため、ログ出力や処理実行時刻の記録など、時刻まで必要な処理に向いています。
1-3. DateTime.Todayで今日の日付のみを取得する
DateTime.Todayを使うと、今日の日付を取得できます。
C#DateTime today = DateTime.Today;
Console.WriteLine(today);
出力例は次のようになります。
2026/06/18 0:00:00
DateTime.Todayも型としてはDateTimeなので、内部的には時刻情報を持っています。ただし、時刻部分は常に00:00:00です。
そのため、今日の日付だけを基準にしたい処理では、DateTime.Todayを使うと意図がわかりやすくなります。
1-4. まず覚えるべき最小コード例
C#で現在日付を扱うときに、まず覚えておきたい最小コードは次のとおりです。
C#// 現在の日付と時刻
DateTime now = DateTime.Now;
// 今日の日付
DateTime today = DateTime.Today;
// 今日の日付を文字列で表示
string dateText = DateTime.Today.ToString("yyyy/MM/dd");
Console.WriteLine(dateText);
出力例は次のようになります。
2026/06/18
現在日付を取得するだけであれば、基本的にはこの3つを理解しておけば十分です。
2. DateTime.NowとDateTime.Todayの違い
2-1. DateTime.Nowは現在日時を返す
DateTime.Nowは、現在の日付と時刻を返します。
C#DateTime now = DateTime.Now;
Console.WriteLine(now);
Console.WriteLine(now.Hour);
Console.WriteLine(now.Minute);
Console.WriteLine(now.Second);
たとえば、実行時刻が14時35分20秒であれば、DateTime.Nowにはその時刻情報も含まれます。
ログ、更新日時、登録日時、処理開始時刻などを保存する場合は、DateTime.Nowを使うケースが多いです。
C#DateTime createdAt = DateTime.Now;
このように書くと、「作成された日時」を記録する意図が伝わりやすくなります。
2-2. DateTime.Todayは時刻が00:00:00になる
DateTime.Todayは、今日の日付を返しますが、時刻部分は00:00:00になります。
C#DateTime today = DateTime.Today;
Console.WriteLine(today);
Console.WriteLine(today.Hour);
Console.WriteLine(today.Minute);
Console.WriteLine(today.Second);
出力例は次のようになります。
2026/06/18 0:00:00
0
0
0
つまり、DateTime.Todayは「今日の0時0分0秒」を表すDateTimeです。
日付比較や締切日判定などで、時刻を含めたくない場合に便利です。
2-3. 日付だけ使いたい場合はTodayがわかりやすい
日付だけを使いたい場合は、DateTime.Todayを使うとコードの意図が明確になります。
C#DateTime targetDate = DateTime.Today;
このコードを見ると、「今日の日付だけを扱いたい」という目的がすぐにわかります。
一方、次のようにDateTime.Nowを使うと、時刻も含まれてしまいます。
C#DateTime targetDate = DateTime.Now;
この場合、targetDateには現在時刻も入ります。日付だけを比較したい処理でそのまま使うと、意図しない判定結果になることがあります。
日付だけが必要な処理では、基本的にDateTime.Todayを選ぶと安全です。
2-4. NowとTodayの使い分け早見表
DateTime.NowとDateTime.Todayの使い分けは、次のように考えるとわかりやすいです。
| やりたいこと | 使用するプロパティ |
|---|---|
| 現在の日付と時刻を取得したい | DateTime.Now |
| 今日の日付だけを取得したい | DateTime.Today |
| ログに実行時刻を残したい | DateTime.Now |
| ファイル名に日付だけを付けたい | DateTime.Today |
| 今日かどうかを判定したい | DateTime.Todayまたは.Date |
| 締切日と今日を比較したい | DateTime.Today |
基本的には、時刻が必要ならNow、日付だけならTodayと覚えておけば問題ありません。
3. 現在日付を指定フォーマットで文字列に変換する方法
3-1. ToStringで日付をフォーマットする基本
取得した現在日付を画面に表示したり、ファイル名に使ったりする場合は、ToStringメソッドで文字列に変換します。
C#DateTime today = DateTime.Today;
string text = today.ToString("yyyy/MM/dd");
Console.WriteLine(text);
出力例は次のとおりです。
2026/06/18
ToStringに指定する"yyyy/MM/dd"のような文字列を、日付フォーマット文字列と呼びます。
よく使う指定は次のとおりです。
| 指定 | 意味 |
|---|---|
yyyy | 4桁の年 |
MM | 2桁の月 |
dd | 2桁の日 |
HH | 24時間表記の時 |
mm | 分 |
ss | 秒 |
注意点として、月は大文字のMM、分は小文字のmmです。間違えやすいので気をつけましょう。
3-2. yyyy/MM/dd形式で表示する
現在日付をyyyy/MM/dd形式で表示するには、次のように書きます。
C#string dateText = DateTime.Today.ToString("yyyy/MM/dd");
Console.WriteLine(dateText);
出力例です。
2026/06/18
日本の業務システムや管理画面では、yyyy/MM/dd形式がよく使われます。
現在日時から日付部分だけを表示したい場合は、次のようにDateTime.Nowに対してフォーマットを指定しても構いません。
C#string dateText = DateTime.Now.ToString("yyyy/MM/dd");
Console.WriteLine(dateText);
この場合、DateTime.Now自体には時刻が含まれていますが、表示される文字列には日付だけが出力されます。
3-3. yyyy-MM-dd形式で表示する
現在日付をyyyy-MM-dd形式で表示するには、次のように書きます。
C#string dateText = DateTime.Today.ToString("yyyy-MM-dd");
Console.WriteLine(dateText);
出力例です。
2026-06-18
yyyy-MM-dd形式は、データベース、CSV、API、JSONなどでもよく使われる形式です。
たとえば、APIに日付文字列を渡す場合などは、スラッシュ区切りよりもハイフン区切りのほうが扱いやすいことがあります。
C#string requestDate = DateTime.Today.ToString("yyyy-MM-dd");
外部システムと連携する場合は、相手側が求める日付形式に合わせてフォーマットを指定しましょう。
3-4. 年月日形式で表示する
画面表示などで「2026年06月18日」のように表示したい場合は、次のように書きます。
C#string dateText = DateTime.Today.ToString("yyyy年MM月dd日");
Console.WriteLine(dateText);
出力例です。
2026年06月18日
月や日を1桁で表示したい場合は、MMやddではなく、Mやdを使います。
C#string dateText = DateTime.Today.ToString("yyyy年M月d日");
Console.WriteLine(dateText);
出力例です。
2026年6月18日
ゼロ埋めしたい場合はMM、ddを使い、自然な日本語表示にしたい場合はM、dを使うとよいでしょう。
3-5. 時刻も含めて表示する場合のフォーマット例
現在日付だけでなく、現在時刻も含めて表示したい場合は、DateTime.Nowを使います。
C#string dateTimeText = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
Console.WriteLine(dateTimeText);
出力例です。
2026/06/18 14:35:20
ログや処理履歴では、秒まで含めた形式がよく使われます。
C#string logMessage = $"処理を開始しました: {DateTime.Now:yyyy/MM/dd HH:mm:ss}";
Console.WriteLine(logMessage);
出力例です。
処理を開始しました: 2026/06/18 14:35:20
文字列補間を使う場合は、{DateTime.Now:yyyy/MM/dd HH:mm:ss}のように書くことで、直接フォーマットを指定できます。
4. 現在日付だけを扱う実装パターン
4-1. DateTime.Now.Dateで日付部分だけ取得する
DateTime.Nowから日付部分だけを取得したい場合は、.Dateプロパティを使います。
C#DateTime dateOnly = DateTime.Now.Date;
Console.WriteLine(dateOnly);
出力例です。
2026/06/18 0:00:00
.Dateを使うと、日付はそのままで、時刻部分が00:00:00になります。
次のコードは、結果としてほぼ同じ意味になります。
C#DateTime today1 = DateTime.Today;
DateTime today2 = DateTime.Now.Date;
どちらも今日の日付を表し、時刻は00:00:00です。
4-2. DateTime.Todayとの違い
DateTime.TodayとDateTime.Now.Dateは、どちらも今日の日付を取得するために使えます。
C#DateTime today = DateTime.Today;
DateTime nowDate = DateTime.Now.Date;
多くの場合、結果は同じです。
ただし、コードの読みやすさを考えると、今日の日付がほしいだけならDateTime.Todayのほうがシンプルです。
C#DateTime targetDate = DateTime.Today;
一方、すでにDateTime型の変数があり、その日付部分だけを取り出したい場合は.Dateを使います。
C#DateTime createdAt = DateTime.Now;
DateTime createdDate = createdAt.Date;
このように、現在日付を直接取得するならToday、既存の日時から日付部分だけを取り出すなら.Dateと考えるとわかりやすいです。
4-3. 画面表示用と内部処理用で使い分ける
C#で現在日付を扱うときは、画面表示用の文字列と、内部処理用のDateTimeを分けて考えることが重要です。
たとえば、内部処理ではDateTimeのまま保持します。
C#DateTime today = DateTime.Today;
画面に表示するときだけ、文字列に変換します。
C#string displayDate = today.ToString("yyyy/MM/dd");
Console.WriteLine(displayDate);
よくない例は、必要以上に早い段階で文字列に変換してしまうことです。
C#string todayText = DateTime.Today.ToString("yyyy/MM/dd");
画面表示だけなら問題ありませんが、その後で日付比較や日付計算をしたい場合、文字列のままだと扱いにくくなります。
内部処理ではDateTime、表示するときだけToStringで文字列化する、という使い分けを意識しましょう。
4-4. 日付比較で時刻を無視したい場合の書き方
日付比較で時刻を無視したい場合は、比較する値の.Dateを使います。
C#DateTime createdAt = new DateTime(2026, 6, 18, 14, 35, 20);
if (createdAt.Date == DateTime.Today)
{
Console.WriteLine("今日作成されたデータです。");
}
createdAtには時刻が含まれていますが、.Dateを使うことで日付部分だけを比較できます。
逆に、次のように比較すると、時刻まで含めて比較されるため、期待どおりにならないことがあります。
C#DateTime createdAt = new DateTime(2026, 6, 18, 14, 35, 20);
if (createdAt == DateTime.Today)
{
Console.WriteLine("今日作成されたデータです。");
}
この場合、createdAtは14:35:20、DateTime.Todayは00:00:00なので、同じ日付でも一致しません。
日付だけを比較したい場合は、必ず.DateやDateTime.Todayを使って、時刻部分をそろえることが大切です。
5. 現在日付を使ったよくある処理例
5-1. 今日の日付をコンソールに表示する
今日の日付をコンソールに表示する基本例です。
C#DateTime today = DateTime.Today;
Console.WriteLine(today.ToString("yyyy/MM/dd"));
出力例です。
2026/06/18
より短く書くこともできます。
C#Console.WriteLine(DateTime.Today.ToString("yyyy/MM/dd"));
現在日時を表示したい場合は、DateTime.Nowを使います。
C#Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
日付だけなのか、時刻も必要なのかによって使い分けましょう。
5-2. ファイル名に現在日付を付ける
ファイル名に現在日付を付けたい場合は、yyyyMMdd形式がよく使われます。
C#string dateText = DateTime.Today.ToString("yyyyMMdd");
string fileName = $"report_{dateText}.csv";
Console.WriteLine(fileName);
出力例です。
report_20260618.csv
時刻まで含めたい場合は、次のようにします。
C#string dateTimeText = DateTime.Now.ToString("yyyyMMdd_HHmmss");
string fileName = $"log_{dateTimeText}.txt";
Console.WriteLine(fileName);
出力例です。
log_20260618_143520.txt
ファイル名では、スラッシュ/やコロン:などが使えない場合があります。そのため、yyyyMMddやyyyyMMdd_HHmmssのように、記号を少なくした形式が安全です。
5-3. ログ出力に現在日時を含める
ログには、現在日付だけでなく、時刻も含めるのが一般的です。
C#string message = "処理が完了しました。";
string log = $"{DateTime.Now:yyyy/MM/dd HH:mm:ss} {message}";
Console.WriteLine(log);
出力例です。
2026/06/18 14:35:20 処理が完了しました。
ログでは、いつ処理が行われたかを正確に追跡する必要があるため、DateTime.TodayではなくDateTime.Nowを使うことが多いです。
エラー発生時刻を出力する場合も同様です。
C#try
{
// 何らかの処理
}
catch (Exception ex)
{
Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} エラー: {ex.Message}");
}
5-4. 今日かどうかを判定する
ある日付が今日かどうかを判定するには、.DateとDateTime.Todayを比較します。
C#DateTime targetDate = new DateTime(2026, 6, 18, 10, 30, 0);
if (targetDate.Date == DateTime.Today)
{
Console.WriteLine("今日です。");
}
else
{
Console.WriteLine("今日ではありません。");
}
targetDateに時刻が含まれていても、.Dateを使えば日付部分だけで比較できます。
メソッドにすると、次のように書けます。
C#static bool IsToday(DateTime date)
{
return date.Date == DateTime.Today;
}
使い方は次のとおりです。
C#DateTime updatedAt = DateTime.Now;
if (IsToday(updatedAt))
{
Console.WriteLine("本日更新されました。");
}
今日かどうかを判定する場合は、時刻部分を無視することがポイントです。
5-5. 期限日や締切日との比較に使う
期限日や締切日と現在日付を比較する場合は、DateTime.Todayを使うとわかりやすくなります。
C#DateTime dueDate = new DateTime(2026, 6, 20);
DateTime today = DateTime.Today;
if (today > dueDate)
{
Console.WriteLine("期限切れです。");
}
else if (today == dueDate)
{
Console.WriteLine("本日が期限です。");
}
else
{
Console.WriteLine("期限内です。");
}
期限日が日付だけで管理されている場合は、DateTime.NowではなくDateTime.Todayを使うほうが安全です。
DateTime.Nowを使うと、時刻まで比較されてしまいます。
C#DateTime dueDate = new DateTime(2026, 6, 18);
if (DateTime.Now > dueDate)
{
Console.WriteLine("期限切れです。");
}
このコードでは、期限日が今日であっても、現在時刻が00:00:00を過ぎていればDateTime.Now > dueDateが真になります。
日単位で期限を判定するなら、次のようにDateTime.Todayを使いましょう。
C#if (DateTime.Today > dueDate)
{
Console.WriteLine("期限切れです。");
}
6. UTCやタイムゾーンを考慮する場合
6-1. DateTime.UtcNowでUTCの現在日時を取得する
UTCの現在日時を取得したい場合は、DateTime.UtcNowを使います。
C#DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow);
DateTime.Nowはローカル環境の現在日時を返しますが、DateTime.UtcNowはUTCの現在日時を返します。
UTCは協定世界時のことで、サーバー間の時刻管理や、国際的なシステムでよく使われます。
ログやデータベースに保存する日時をUTCで統一しておくと、タイムゾーンの違いによる混乱を減らせます。
6-2. NowとUtcNowの違い
DateTime.NowとDateTime.UtcNowの違いは、基準となるタイムゾーンです。
C#DateTime localNow = DateTime.Now;
DateTime utcNow = DateTime.UtcNow;
Console.WriteLine($"Local: {localNow}");
Console.WriteLine($"UTC: {utcNow}");
DateTime.Nowは、実行環境のローカル時刻を返します。
日本時間の環境で実行している場合は、日本時間の現在日時になります。
一方、DateTime.UtcNowはUTCの現在日時を返します。日本時間は通常UTCより9時間進んでいるため、同じ瞬間でも表示される時刻は異なります。
使い分けの目安は次のとおりです。
| 目的 | 使用する値 |
|---|---|
| ユーザーに表示する現在日時 | DateTime.Now |
| ローカル環境基準の処理 | DateTime.Now |
| サーバー保存用の日時 | DateTime.UtcNow |
| 複数タイムゾーン対応 | DateTime.UtcNowまたはDateTimeOffset |
単一の国内向けアプリであればDateTime.Nowでも十分な場合がありますが、クラウド環境や海外ユーザーを扱う場合はUTCを意識する必要があります。
6-3. サーバー環境で注意すべきタイムゾーンの問題
サーバー環境では、実行環境のタイムゾーンが想定と違うことがあります。
たとえば、開発環境では日本時間で動いていても、本番サーバーではUTCで動いている場合があります。
C#DateTime now = DateTime.Now;
このコードは、実行される環境のローカル時刻に依存します。
そのため、サーバーのタイムゾーン設定が変わると、取得される現在日付も変わる可能性があります。
特に注意が必要なのは、日付の境界です。
日本ではすでに6月18日でも、UTCではまだ6月17日というケースがあります。この状態で現在日付を判定すると、ユーザーが期待する日付とシステム内部の日付がずれる可能性があります。
対策としては、次のような方針が考えられます。
| 方針 | 内容 |
|---|---|
| 保存はUTCに統一する | DBにはUTCで日時を保存する |
| 表示時にローカル時間へ変換する | ユーザーのタイムゾーンに合わせて表示する |
| 日付判定の基準を明確にする | 日本時間基準なのかUTC基準なのかを決める |
| サーバーのローカル時刻に依存しすぎない | UtcNowやDateTimeOffsetを検討する |
業務システムでは、「今日」の基準が日本時間なのか、サーバー時刻なのか、ユーザーのタイムゾーンなのかを明確にしておくことが重要です。
6-4. DateTimeOffsetを使うべきケース
タイムゾーンやUTCとの差分を明確に扱いたい場合は、DateTimeOffsetの利用を検討します。
C#DateTimeOffset now = DateTimeOffset.Now;
Console.WriteLine(now);
出力例です。
2026/06/18 14:35:20 +09:00
DateTimeOffsetには、日時に加えてUTCからのオフセット情報が含まれます。
UTCの現在日時を取得する場合は、次のように書けます。
C#DateTimeOffset utcNow = DateTimeOffset.UtcNow;
Console.WriteLine(utcNow);
DateTimeOffsetは、次のようなケースで便利です。
| ケース | 理由 |
|---|---|
| 複数タイムゾーンのユーザーを扱う | UTCとの差分を保持できる |
| APIで日時をやり取りする | オフセット付きで日時を表現しやすい |
| クラウド環境で動作する | サーバーのローカル時刻依存を減らせる |
| 正確な時点を記録したい | いつの時刻かを明確にしやすい |
単純に現在日付を表示するだけならDateTimeで十分ですが、タイムゾーンを正確に扱う必要があるシステムではDateTimeOffsetも選択肢に入ります。
7. C#で現在日付を扱うときの注意点
7-1. 文字列化する前のDateTimeと表示形式を混同しない
DateTimeは日付や時刻を表す型であり、表示形式そのものではありません。
たとえば、次のコードではtodayはDateTime型です。
C#DateTime today = DateTime.Today;
この時点では、yyyy/MM/ddやyyyy-MM-ddといった表示形式は決まっていません。
表示形式を指定するのは、ToStringで文字列に変換するときです。
C#string text = today.ToString("yyyy/MM/dd");
つまり、DateTimeとして保持している間は日付データ、ToStringした後は表示用の文字列です。
この2つを混同すると、日付比較や日付計算がやりにくくなります。
C#// 内部処理用
DateTime today = DateTime.Today;
// 表示用
string displayText = today.ToString("yyyy/MM/dd");
内部処理ではDateTime、表示直前に文字列化する、という考え方を基本にしましょう。
7-2. 日付比較では時刻部分に注意する
DateTimeの比較では、日付だけでなく時刻も比較対象になります。
C#DateTime date1 = new DateTime(2026, 6, 18, 0, 0, 0);
DateTime date2 = new DateTime(2026, 6, 18, 14, 30, 0);
Console.WriteLine(date1 == date2);
出力結果は次のようになります。
False
同じ2026年6月18日でも、時刻が違うため一致しません。
日付だけを比較したい場合は、.Dateを使います。
C#Console.WriteLine(date1.Date == date2.Date);
出力結果です。
True
現在日付と比較する場合も同じです。
C#if (targetDate.Date == DateTime.Today)
{
Console.WriteLine("今日の日付です。");
}
日付比較で意図しない結果になる原因の多くは、時刻部分を考慮していないことです。
7-3. 文化圏による表示形式の違いに注意する
DateTimeをそのままToString()すると、実行環境の文化圏設定によって表示形式が変わることがあります。
C#Console.WriteLine(DateTime.Today.ToString());
環境によって、次のように表示が異なる可能性があります。
2026/06/18 0:00:00
または、
6/18/2026 12:00:00 AM
そのため、決まった形式で表示したい場合は、明示的にフォーマットを指定しましょう。
C#Console.WriteLine(DateTime.Today.ToString("yyyy/MM/dd"));
API連携やファイル出力など、形式が重要な場面では、環境依存の表示に頼らないことが大切です。
必要に応じて、CultureInfoを指定することもできます。
C#using System.Globalization;
string text = DateTime.Today.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);
Console.WriteLine(text);
固定の形式で出力したい場合は、フォーマット文字列を明示するのが基本です。
7-4. テストしやすいコードにするための考え方
DateTime.NowやDateTime.Todayをコードのあちこちで直接呼び出すと、テストがしにくくなる場合があります。
たとえば、次のようなコードです。
C#public bool IsExpired(DateTime dueDate)
{
return DateTime.Today > dueDate;
}
このコードは実行日によって結果が変わります。そのため、テスト時に特定の日付を指定しにくくなります。
テストしやすくするには、現在日付を外から渡せるようにします。
C#public bool IsExpired(DateTime dueDate, DateTime today)
{
return today.Date > dueDate.Date;
}
使う側では、次のように現在日付を渡します。
C#bool result = IsExpired(dueDate, DateTime.Today);
テストでは、任意の日付を指定できます。
C#DateTime dueDate = new DateTime(2026, 6, 17);
DateTime today = new DateTime(2026, 6, 18);
bool result = IsExpired(dueDate, today);
現在日付に依存する処理は、日付を外から渡せる設計にしておくと、単体テストがしやすくなります。
8. 現在日付に関するよくある質問
8-1. C#で今日の日付だけを取得するには?
C#で今日の日付だけを取得するには、DateTime.Todayを使います。
C#DateTime today = DateTime.Today;
表示用に文字列へ変換する場合は、ToStringでフォーマットを指定します。
C#string text = DateTime.Today.ToString("yyyy/MM/dd");
Console.WriteLine(text);
出力例です。
2026/06/18
DateTime.Todayは、今日の日付を返し、時刻部分は00:00:00になります。
8-2. DateTime.Now.ToStringで日付だけ表示するには?
DateTime.Now.ToStringで日付だけ表示するには、日付用のフォーマットを指定します。
C#string text = DateTime.Now.ToString("yyyy/MM/dd");
Console.WriteLine(text);
出力例です。
2026/06/18
DateTime.Nowには時刻も含まれていますが、ToString("yyyy/MM/dd")と指定すれば、表示されるのは日付部分だけです。
ハイフン区切りにしたい場合は、次のように書きます。
C#string text = DateTime.Now.ToString("yyyy-MM-dd");
年月日形式にしたい場合は、次のように書きます。
C#string text = DateTime.Now.ToString("yyyy年MM月dd日");
8-3. 現在日付をyyyyMMdd形式にするには?
現在日付をyyyyMMdd形式にするには、次のように書きます。
C#string text = DateTime.Today.ToString("yyyyMMdd");
Console.WriteLine(text);
出力例です。
20260618
ファイル名に使う場合にも便利です。
C#string fileName = $"backup_{DateTime.Today:yyyyMMdd}.zip";
Console.WriteLine(fileName);
出力例です。
backup_20260618.zip
yyyyMMdd形式は、並び替えたときに日付順になりやすいため、ファイル名や管理番号にもよく使われます。
8-4. DateTime.NowとDateTime.Todayはどちらを使うべき?
時刻まで必要ならDateTime.Now、日付だけでよいならDateTime.Todayを使います。
C#// 現在日時が必要な場合
DateTime now = DateTime.Now;
// 今日の日付だけでよい場合
DateTime today = DateTime.Today;
たとえば、ログ出力や登録日時にはDateTime.Nowが向いています。
C#DateTime createdAt = DateTime.Now;
一方、締切日との比較や今日かどうかの判定にはDateTime.Todayが向いています。
C#if (DateTime.Today > dueDate)
{
Console.WriteLine("期限切れです。");
}
迷った場合は、「時刻が必要かどうか」を基準に判断するとよいでしょう。
8-5. 現在日付をUTCで取得するには?
UTCの現在日時を取得するには、DateTime.UtcNowを使います。
C#DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow);
UTCの日付部分だけを取得したい場合は、.Dateを使います。
C#DateTime utcToday = DateTime.UtcNow.Date;
Console.WriteLine(utcToday);
ただし、UTCの日付と日本時間の日付は一致しない場合があります。
日本時間ではすでに翌日でも、UTCではまだ前日ということがあります。そのため、「今日」の基準がUTCなのか、ユーザーのローカル時間なのかを明確にしておくことが重要です。
タイムゾーンも含めて扱いたい場合は、DateTimeOffset.UtcNowも検討できます。
C#DateTimeOffset utcNow = DateTimeOffset.UtcNow;
Console.WriteLine(utcNow);
まとめ
C#で現在日付を取得するには、主にDateTime.NowとDateTime.Todayを使います。
DateTime.Nowは現在の日付と時刻を取得し、DateTime.Todayは今日の日付を取得して時刻部分が00:00:00になります。
現在日付だけを扱いたい場合は、基本的にDateTime.Todayを使うとわかりやすくなります。現在日時をログに出したい場合や、登録日時・更新日時として保存したい場合はDateTime.Nowを使います。
表示形式を指定したい場合は、ToStringでフォーマットを指定します。
C#DateTime.Today.ToString("yyyy/MM/dd");
DateTime.Today.ToString("yyyy-MM-dd");
DateTime.Today.ToString("yyyyMMdd");
DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
また、日付比較では時刻部分に注意が必要です。同じ日付でも時刻が異なると一致しないため、日付だけを比較したい場合は.DateやDateTime.Todayを使いましょう。
UTCやタイムゾーンを考慮するシステムでは、DateTime.UtcNowやDateTimeOffsetの利用も検討する必要があります。
C#で現在日付を扱うときは、「日付だけが必要なのか」「時刻も必要なのか」「表示用なのか」「内部処理用なのか」を意識して使い分けることが大切です。

