C#で日付をyyyyMMdd形式に変換・文字列からDateTimeへ変換する方法
はじめに
C#で日付を扱うとき、実務でよく使われる形式のひとつがyyyyMMddです。たとえば、2026年6月19日であれば20260619のように、年・月・日を8桁の文字列で表します。
yyyyMMdd形式は、CSV出力、API連携、ファイル名、ログ、データベース連携などでよく使われます。ただし、C#では日付そのものはDateTime型やDateTimeOffset型で扱い、yyyyMMddはあくまで表示・保存・連携用の文字列として扱うのが基本です。
この記事では、C#でDateTimeをyyyyMMdd形式の文字列に変換する方法、反対にyyyyMMdd形式の文字列をDateTimeへ変換する方法、よくあるエラーや実務で使えるコード例まで解説します。
1. C#で日付をyyyyMMdd形式に扱う基本
1-1. yyyyMMddとは何か
yyyyMMddとは、日付を次のように8桁で表す形式です。
C#20260619
内訳は次のとおりです。
yyyy : 4桁の西暦
MM : 2桁の月
dd : 2桁の日
たとえば、2026年1月5日であれば次のようになります。
20260105
月や日が1桁の場合でも、01や05のようにゼロ埋めされる点が特徴です。
C#では、DateTime型の日付をToString("yyyyMMdd")で変換すると、この形式の文字列を取得できます。
C#DateTime date = new DateTime(2026, 1, 5);
string text = date.ToString("yyyyMMdd");
Console.WriteLine(text); // 20260105
1-2. yyyyMMddとyyyy-MM-ddの違い
yyyyMMddとyyyy-MM-ddは、どちらも日付を表す形式ですが、見た目と用途が異なります。
yyyyMMdd : 20260619
yyyy-MM-dd : 2026-06-19
yyyy-MM-ddはハイフンが入っているため、人が見たときに読みやすい形式です。一方、yyyyMMddは区切り文字がないため、ファイル名やコード値、CSVの項目などで扱いやすい形式です。
C#では、どちらもToStringの書式指定で簡単に変換できます。
C#DateTime date = new DateTime(2026, 6, 19);
Console.WriteLine(date.ToString("yyyyMMdd")); // 20260619
Console.WriteLine(date.ToString("yyyy-MM-dd")); // 2026-06-19
見た目は似ていますが、外部システムとの連携ではフォーマットが完全一致している必要があります。yyyyMMddを求められている場面でyyyy-MM-ddを渡すと、エラーになることがあります。
1-3. C#で日付フォーマットを指定する基本構文
C#で日付を文字列に変換する場合は、DateTime.ToStringにフォーマット文字列を指定します。
C#DateTime date = DateTime.Now;
string result = date.ToString("yyyyMMdd");
よく使う日付フォーマットには、次のようなものがあります。
C#DateTime date = new DateTime(2026, 6, 19, 15, 30, 45);
Console.WriteLine(date.ToString("yyyyMMdd")); // 20260619
Console.WriteLine(date.ToString("yyyy-MM-dd")); // 2026-06-19
Console.WriteLine(date.ToString("yyyy/MM/dd")); // 2026/06/19
Console.WriteLine(date.ToString("yyyyMMddHHmmss")); // 20260619153045
ここで重要なのは、MMとmmを間違えないことです。
MM : 月
mm : 分
yyyyMMddでは月を表すために大文字のMMを使います。
1-4. yyyyMMdd形式が使われる主な場面
yyyyMMdd形式は、次のような場面でよく使われます。
・CSVや固定長ファイルの日付項目
・API連携時の日付パラメータ
・帳票やバッチ処理の日付キー
・ログファイル名
・バックアップファイル名
・データベースの文字列項目
・外部システムとの連携データ
たとえば、日付付きのファイル名を作成する場合は次のように書けます。
C#string fileName = $"sales_{DateTime.Today:yyyyMMdd}.csv";
Console.WriteLine(fileName); // sales_20260619.csv
yyyyMMdd形式は、数字だけで構成されるため並び替えにも強いです。文字列として昇順ソートしても、日付順に並びやすいというメリットがあります。
20260617
20260618
20260619
ただし、日付の計算や比較を行う場合は、文字列のまま処理するのではなく、DateTime型に変換してから扱うのが基本です。
2. DateTimeをyyyyMMdd形式の文字列に変換する方法
2-1. DateTime.ToString("yyyyMMdd")の基本
DateTimeをyyyyMMdd形式の文字列に変換する基本は、ToString("yyyyMMdd")です。
C#DateTime date = new DateTime(2026, 6, 19);
string yyyymmdd = date.ToString("yyyyMMdd");
Console.WriteLine(yyyymmdd); // 20260619
ToString("yyyyMMdd")を使うと、年は4桁、月と日は2桁で出力されます。月や日が1桁の場合も自動的にゼロ埋めされます。
C#DateTime date = new DateTime(2026, 1, 5);
string yyyymmdd = date.ToString("yyyyMMdd");
Console.WriteLine(yyyymmdd); // 20260105
yyyyMMdd形式にするために、自分で文字列連結する必要はありません。
C#// 非推奨ではないが、冗長でミスが起きやすい
string text = date.Year.ToString()
+ date.Month.ToString("00")
+ date.Day.ToString("00");
通常は次のように書くのが簡潔です。
C#string text = date.ToString("yyyyMMdd");
2-2. 現在日付をyyyyMMdd形式に変換する
現在日時をyyyyMMdd形式に変換する場合は、DateTime.Nowを使います。
C#string today = DateTime.Now.ToString("yyyyMMdd");
Console.WriteLine(today);
ただし、日付だけが必要な場合はDateTime.Todayを使うこともできます。
C#string today = DateTime.Today.ToString("yyyyMMdd");
Console.WriteLine(today);
DateTime.Nowには現在時刻も含まれますが、yyyyMMdd形式に変換する場合、時刻部分は出力されません。
C#DateTime now = DateTime.Now;
Console.WriteLine(now); // 2026/06/19 15:30:45 など
Console.WriteLine(now.ToString("yyyyMMdd")); // 20260619
2-3. 任意の日付をyyyyMMdd形式に変換する
任意の日付をyyyyMMdd形式に変換する場合は、DateTimeのインスタンスを作成してからToStringを使います。
C#DateTime date = new DateTime(2026, 12, 31);
string result = date.ToString("yyyyMMdd");
Console.WriteLine(result); // 20261231
文字列から作成した日付をyyyyMMddに変換することもできます。
C#DateTime date = DateTime.Parse("2026/12/31");
string result = date.ToString("yyyyMMdd");
Console.WriteLine(result); // 20261231
ただし、入力文字列の形式が決まっている場合は、DateTime.ParseよりもDateTime.ParseExactやDateTime.TryParseExactを使う方が安全です。
2-4. DateTime.NowとDateTime.Todayの使い分け
DateTime.NowとDateTime.Todayは、どちらも現在日付を扱うときに使えますが、意味が異なります。
C#DateTime now = DateTime.Now;
DateTime today = DateTime.Today;
Console.WriteLine(now); // 現在の日付と時刻
Console.WriteLine(today); // 今日の日付 00:00:00
DateTime.Nowは現在日時を取得します。
C#DateTime now = DateTime.Now;
// 例: 2026/06/19 15:30:45
DateTime.Todayは今日の日付を取得し、時刻は00:00:00になります。
C#DateTime today = DateTime.Today;
// 例: 2026/06/19 00:00:00
yyyyMMdd形式に変換するだけであれば、どちらを使っても結果は同じです。
C#Console.WriteLine(DateTime.Now.ToString("yyyyMMdd"));
Console.WriteLine(DateTime.Today.ToString("yyyyMMdd"));
ただし、日付だけを扱う意図を明確にしたい場合は、DateTime.Todayを使うと読みやすくなります。
C#string targetDate = DateTime.Today.ToString("yyyyMMdd");
一方、日時を取得したうえで、ログや処理時刻も扱う場合はDateTime.Nowが適しています。
2-5. CultureInfoを指定して安全に変換する方法
yyyyMMddのように数字だけの固定形式では、通常の日本語環境で大きな問題になることは少ないです。ただし、実務では環境による影響を避けるためにCultureInfo.InvariantCultureを指定することがあります。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 19);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619
CultureInfo.InvariantCultureは、特定の言語や地域に依存しないカルチャです。API連携やファイル出力など、常に同じ形式で出力したい場合に使うと安全です。
C#public static string ToYyyyMMdd(DateTime date)
{
return date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
}
特に、サーバー環境、バッチ処理、クラウド環境などでは、実行環境のカルチャ設定が開発環境と異なる場合があります。そのため、固定フォーマットで日付を文字列化する処理では、CultureInfo.InvariantCultureを指定しておくと安心です。
3. yyyyMMdd形式の文字列をDateTimeに変換する方法
3-1. DateTime.ParseExactで変換する基本
yyyyMMdd形式の文字列をDateTimeに変換するには、DateTime.ParseExactを使います。
C#using System;
using System.Globalization;
string text = "20260619";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
Console.WriteLine(date); // 2026/06/19 0:00:00
ParseExactは、指定したフォーマットと完全に一致する文字列だけを変換します。
C#string text = "2026-06-19";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
上記のように、入力がyyyy-MM-ddなのにフォーマットとしてyyyyMMddを指定すると、FormatExceptionが発生します。
yyyyMMdd形式を厳密に受け取りたい場合は、ParseExactが適しています。
3-2. DateTime.TryParseExactで安全に変換する方法
ユーザー入力や外部ファイル、APIから受け取った文字列を変換する場合は、TryParseExactを使うのがおすすめです。
C#using System;
using System.Globalization;
string text = "20260619";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
if (success)
{
Console.WriteLine($"変換成功: {date}");
}
else
{
Console.WriteLine("変換失敗");
}
TryParseExactは、変換に失敗しても例外を投げません。戻り値としてtrueまたはfalseを返します。
C#string text = "20260230";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
Console.WriteLine(success); // False
20260230のように存在しない日付の場合も、TryParseExactなら安全に判定できます。
3-3. yyyyMMdd形式以外の文字列が来た場合のエラー対策
yyyyMMdd形式以外の文字列が来る可能性がある場合、ParseExactをそのまま使うと例外が発生します。
C#string text = "2026-06-19";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
このコードでは、入力文字列がyyyyMMddではないためFormatExceptionが発生します。
安全に処理するには、TryParseExactを使います。
C#string text = "2026-06-19";
if (DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine(date);
}
else
{
Console.WriteLine("yyyyMMdd形式ではありません。");
}
外部から受け取るデータは、想定外の形式になっている可能性があります。そのため、実務ではTryParseExactで検証してから処理することが多いです。
3-4. null・空文字・不正な日付への対応
yyyyMMdd形式の文字列を変換する場合は、nullや空文字への対応も必要です。
C#using System;
using System.Globalization;
string? text = null;
if (!string.IsNullOrWhiteSpace(text) &&
DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine($"変換成功: {date}");
}
else
{
Console.WriteLine("日付文字列が不正です。");
}
string.IsNullOrWhiteSpaceを使うと、次のような値をまとめてチェックできます。
null
""
" "
不正な日付もTryParseExactで判定できます。
C#string text = "20240230";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
Console.WriteLine(success); // False
2024年2月はうるう年ですが、2月30日は存在しないため変換に失敗します。
3-5. ParseExactとTryParseExactの違い
ParseExactとTryParseExactの大きな違いは、変換に失敗したときの動作です。
ParseExact : 失敗すると例外を投げる
TryParseExact : 失敗するとfalseを返す
ParseExactの例です。
C#string text = "2026-06-19";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
この場合、文字列がyyyyMMdd形式ではないため、例外が発生します。
一方、TryParseExactでは例外を投げずに判定できます。
C#string text = "2026-06-19";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
if (!success)
{
Console.WriteLine("変換できませんでした。");
}
入力値が必ず正しいと分かっている場合はParseExactでも問題ありません。しかし、ユーザー入力、CSV、API、外部システム連携などでは、不正な値が来る可能性があるため、TryParseExactを使う方が安全です。
4. yyyyMMdd形式の変換でよくあるエラーと原因
4-1. FormatExceptionが発生するケース
FormatExceptionは、文字列が指定した日付フォーマットに一致しない場合に発生します。
C#string text = "2026/06/19";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
このコードでは、入力文字列にスラッシュが含まれているため、yyyyMMdd形式とは一致しません。
次のようなケースでもFormatExceptionが発生します。
2026-06-19
2026/06/19
2026061
202606190
abc
空文字
安全に処理したい場合は、TryParseExactを使います。
C#bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
変換前に8桁の数字かどうかを確認する方法もあります。
C#bool isEightDigits = text.Length == 8 && text.All(char.IsDigit);
ただし、8桁の数字であっても、20240230のように存在しない日付は変換できません。最終的な日付チェックはTryParseExactで行うのが確実です。
4-2. yyyyとYYYYの違いに注意する
C#の日付フォーマットでは、年を表す場合は小文字のyyyyを使います。
C#DateTime date = new DateTime(2026, 6, 19);
Console.WriteLine(date.ToString("yyyyMMdd")); // 20260619
YYYYと大文字で書かないように注意してください。
C#Console.WriteLine(date.ToString("YYYYMMdd"));
C#のカスタム日付書式では、年を4桁で表す指定はyyyyです。Javaなど他の言語ではYYYYが使われる場面もありますが、C#では基本的にyyyyを使うと覚えておきましょう。
特に、他言語のサンプルコードをC#に移植するときは注意が必要です。
C#// C#ではこちらを使う
string text = date.ToString("yyyyMMdd");
4-3. MMとmmの違いに注意する
yyyyMMdd形式で特に多いミスが、MMとmmの間違いです。
MM : 月
mm : 分
正しい書き方は次のとおりです。
C#DateTime date = new DateTime(2026, 6, 19, 15, 30, 0);
Console.WriteLine(date.ToString("yyyyMMdd")); // 20260619
誤ってmmを使うと、月ではなく分が出力されます。
C#DateTime date = new DateTime(2026, 6, 19, 15, 30, 0);
Console.WriteLine(date.ToString("yyyymmdd")); // 20263019
この例では、月の06ではなく、分の30が出力されています。
yyyyMMdd形式では、月は必ず大文字のMMです。
C#string result = date.ToString("yyyyMMdd");
4-4. 20240230のような存在しない日付への対応
20240230のように8桁の数字であっても、存在しない日付はDateTimeに変換できません。
C#string text = "20240230";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
Console.WriteLine(success); // False
文字数や数字チェックだけでは、正しい日付かどうかは判定できません。
C#string text = "20240230";
bool isEightDigits = text.Length == 8 && text.All(char.IsDigit);
Console.WriteLine(isEightDigits); // True
このように、8桁の数字であることと、実在する日付であることは別です。
実務では次のように、最終的にTryParseExactで日付として妥当かどうかを確認します。
C#public static bool IsValidYyyyMMdd(string text)
{
return DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out _
);
}
4-5. ゼロ埋めされていない日付の扱い
yyyyMMdd形式では、月と日は必ず2桁です。
正しい例: 20260105
誤った例: 202615
たとえば、2026年1月5日を202615のように表すと、yyyyMMdd形式としては不正です。
C#string text = "202615";
bool success = DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
Console.WriteLine(success); // False
ゼロ埋めされた形式で出力したい場合は、ToString("yyyyMMdd")を使えば自動で対応できます。
C#DateTime date = new DateTime(2026, 1, 5);
string result = date.ToString("yyyyMMdd");
Console.WriteLine(result); // 20260105
もし入力として2026/1/5のような文字列を受け取る場合は、いったん別のフォーマットで解析してからyyyyMMddに変換します。
C#string input = "2026/1/5";
DateTime date = DateTime.ParseExact(
input,
"yyyy/M/d",
CultureInfo.InvariantCulture
);
string result = date.ToString("yyyyMMdd");
Console.WriteLine(result); // 20260105
5. 実務で使えるyyyyMMdd変換コード例
5-1. DateTimeからyyyyMMdd文字列へ変換するサンプル
DateTimeからyyyyMMdd形式の文字列へ変換する基本サンプルです。
C#using System;
using System.Globalization;
public class Program
{
public static void Main()
{
DateTime date = new DateTime(2026, 6, 19);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619
}
}
現在日付を使う場合は次のように書けます。
C#using System;
using System.Globalization;
string today = DateTime.Today.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(today);
ファイル名に使う場合の例です。
C#string fileName = $"report_{DateTime.Today:yyyyMMdd}.csv";
Console.WriteLine(fileName);
ただし、カルチャを明示したい場合は次のように書くとより安全です。
C#string fileName = $"report_{DateTime.Today.ToString("yyyyMMdd", CultureInfo.InvariantCulture)}.csv";
5-2. yyyyMMdd文字列からDateTimeへ変換するサンプル
yyyyMMdd形式の文字列からDateTimeへ変換するサンプルです。
C#using System;
using System.Globalization;
public class Program
{
public static void Main()
{
string text = "20260619";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture
);
Console.WriteLine(date); // 2026/06/19 0:00:00
}
}
入力値が不正な可能性がある場合は、TryParseExactを使います。
C#using System;
using System.Globalization;
string text = "20260619";
if (DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine($"変換成功: {date:yyyy-MM-dd}");
}
else
{
Console.WriteLine("変換失敗");
}
TryParseExactを使うことで、例外処理に頼らずに変換の成否を判定できます。
5-3. 変換に失敗した場合の分岐処理
実務では、変換に失敗した場合にエラーメッセージを返したり、処理を中断したりする必要があります。
C#using System;
using System.Globalization;
string input = "20260230";
if (!DateTime.TryParseExact(
input,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine("日付が不正です。yyyyMMdd形式で入力してください。");
return;
}
Console.WriteLine($"処理対象日: {date:yyyy-MM-dd}");
メソッドの戻り値として結果を返す場合は、次のように書けます。
C#public static bool TryConvertToDateTime(string input, out DateTime date)
{
return DateTime.TryParseExact(
input,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out date
);
}
呼び出し側です。
C#if (TryConvertToDateTime("20260619", out DateTime date))
{
Console.WriteLine(date);
}
else
{
Console.WriteLine("変換できませんでした。");
}
5-4. メソッド化して再利用する書き方
yyyyMMdd形式の変換を複数箇所で使う場合は、メソッド化しておくと便利です。
C#using System;
using System.Globalization;
public static class DateTimeExtensions
{
public static string ToYyyyMMdd(this DateTime date)
{
return date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
}
}
使用例です。
C#DateTime date = new DateTime(2026, 6, 19);
string result = date.ToYyyyMMdd();
Console.WriteLine(result); // 20260619
文字列からDateTimeへ変換する処理もメソッド化できます。
C#using System;
using System.Globalization;
public static class DateParser
{
public static bool TryParseYyyyMMdd(string? text, out DateTime date)
{
if (string.IsNullOrWhiteSpace(text))
{
date = default;
return false;
}
return DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out date
);
}
}
使用例です。
C#if (DateParser.TryParseYyyyMMdd("20260619", out DateTime date))
{
Console.WriteLine(date.ToString("yyyy-MM-dd"));
}
else
{
Console.WriteLine("日付が不正です。");
}
共通処理としてまとめておくことで、フォーマットの指定ミスやカルチャ指定漏れを防ぎやすくなります。
5-5. nullable DateTimeを扱う場合の書き方
DateTime?のようなnullable型を扱う場合は、値があるかどうかを確認してから変換します。
C#DateTime? date = new DateTime(2026, 6, 19);
string? result = date?.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619
dateがnullの場合、結果もnullになります。
C#DateTime? date = null;
string? result = date?.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // null
空文字を返したい場合は、null合体演算子を使います。
C#DateTime? date = null;
string result = date?.ToString("yyyyMMdd", CultureInfo.InvariantCulture) ?? "";
Console.WriteLine(result); // 空文字
メソッド化する場合は次のように書けます。
C#public static string ToYyyyMMddOrEmpty(DateTime? date)
{
return date?.ToString("yyyyMMdd", CultureInfo.InvariantCulture) ?? "";
}
nullを許容する設計なのか、空文字に変換する設計なのかは、システムの仕様に合わせて決めることが重要です。
6. yyyyMMdd形式を使う際の注意点
6-1. 日付型と文字列型を混同しない
yyyyMMddは日付の表示形式であり、日付型そのものではありません。
C#DateTime date = new DateTime(2026, 6, 19);
string text = date.ToString("yyyyMMdd");
この場合、dateはDateTime型、textはstring型です。
日付の加算や比較を行う場合は、DateTime型のまま処理します。
C#DateTime date = new DateTime(2026, 6, 19);
DateTime nextDay = date.AddDays(1);
Console.WriteLine(nextDay.ToString("yyyyMMdd")); // 20260620
文字列のまま日付計算をしようとすると、処理が複雑になり、バグの原因になります。
C#// 避けたい例
string yyyymmdd = "20260619";
// 文字列のまま日付計算しようとしない
基本的には、内部処理ではDateTime、外部出力ではyyyyMMdd文字列、という役割分担にすると分かりやすくなります。
6-2. データベース保存時の型選び
データベースに日付を保存する場合、可能であれば日付型を使うのが基本です。
SQL Server : date, datetime, datetime2
MySQL : DATE, DATETIME
PostgreSQL : date, timestamp
yyyyMMdd形式の文字列として保存すると、日付としての制約や計算が扱いにくくなることがあります。
たとえば、日付型で保存していれば、日付の範囲検索が自然に書けます。
SQLWHERE order_date BETWEEN '2026-06-01' AND '2026-06-30'
一方、外部システムの仕様でyyyyMMdd形式の文字列保存が必要な場合もあります。その場合でも、アプリケーション側ではDateTimeに変換してから処理すると安全です。
C#string dbValue = "20260619";
if (DateTime.TryParseExact(
dbValue,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine(date);
}
保存形式とアプリケーション内部の型は分けて考えることが大切です。
6-3. API・CSV・ファイル名で使う場合の注意点
APIやCSVでyyyyMMdd形式を使う場合は、仕様書に記載されたフォーマットと完全に一致させる必要があります。
C#var requestDate = DateTime.Today.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
CSV出力では、日付がExcelなどで自動変換されることがあります。20260619のような値が数値として扱われる場合もあるため、取り込み側の仕様も確認しておくと安心です。
ファイル名で使う場合は、yyyyMMdd形式は扱いやすいです。
C#string fileName = $"backup_{DateTime.Now:yyyyMMdd}.zip";
時刻まで含めたい場合は、yyyyMMddHHmmss形式にするとファイル名の重複を避けやすくなります。
C#string fileName = $"backup_{DateTime.Now:yyyyMMddHHmmss}.zip";
ただし、ファイル名に使う日時がローカル時刻なのかUTCなのかは、システムの運用ルールに合わせる必要があります。
6-4. タイムゾーンやUTCを考慮するケース
yyyyMMdd形式は日付だけを表すため、時刻やタイムゾーンの情報は含まれません。
そのため、次のようなケースでは注意が必要です。
・海外ユーザーが利用するサービス
・UTCで日時を管理しているシステム
・日付の境界をまたぐバッチ処理
・クラウド環境で実行する処理
・APIの仕様でUTCが指定されている場合
たとえば、UTCの日付をyyyyMMdd形式にしたい場合は、DateTime.UtcNowを使います。
C#string utcDate = DateTime.UtcNow.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
一方、日本時間の日付を使いたい場合は、サーバーのローカル時刻に依存せず、タイムゾーンを明示して変換することもあります。
C#TimeZoneInfo tokyoTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime utcNow = DateTime.UtcNow;
DateTime tokyoNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, tokyoTimeZone);
string result = tokyoNow.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Windows環境では"Tokyo Standard Time"を使うことが多いですが、環境によってタイムゾーンIDの扱いが異なる場合があります。クロスプラットフォームで動かす場合は、実行環境のタイムゾーンIDを確認しておきましょう。
6-5. DateTimeOffsetを使うべきケース
タイムゾーンやUTCとの差を明確に扱いたい場合は、DateTimeよりもDateTimeOffsetが適していることがあります。
C#DateTimeOffset now = DateTimeOffset.Now;
string result = now.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result);
DateTimeOffsetは、日時とUTCからのオフセットを持っています。
C#DateTimeOffset dateTimeOffset = new DateTimeOffset(2026, 6, 19, 10, 0, 0, TimeSpan.FromHours(9));
Console.WriteLine(dateTimeOffset); // 2026/06/19 10:00:00 +09:00
Console.WriteLine(dateTimeOffset.ToString("yyyyMMdd")); // 20260619
API連携やログ、複数地域で利用するシステムでは、DateTimeOffsetを使うことで、どのタイムゾーンの日時なのかを明確にしやすくなります。
ただし、yyyyMMdd形式に変換した時点で、時刻やオフセット情報は文字列には含まれません。必要な情報を失わないように、どの段階でyyyyMMddに変換するかを考えることが重要です。
7. yyyyMMdd形式に関するよくある質問
7-1. yyyyMMddをint型に変換してもよいか
yyyyMMddは数字だけなので、int型に変換したくなることがあります。
C#string text = "20260619";
int value = int.Parse(text);
Console.WriteLine(value); // 20260619
技術的には可能ですが、基本的には文字列として扱うことをおすすめします。
理由は、yyyyMMddは数値ではなく日付を表すコードだからです。足し算や引き算をする値ではありません。
C#int value = 20260619;
Console.WriteLine(value + 1); // 20260620 になるが、日付計算として正しいとは限らない
たとえば、20260630 + 1は20260631になりますが、2026年6月31日は存在しません。
日付計算をしたい場合は、DateTimeに変換してから行います。
C#DateTime date = DateTime.ParseExact(
"20260630",
"yyyyMMdd",
CultureInfo.InvariantCulture
);
DateTime nextDay = date.AddDays(1);
Console.WriteLine(nextDay.ToString("yyyyMMdd")); // 20260701
yyyyMMddは、基本的にstringまたはDateTimeとして扱うのが安全です。
7-2. yyyyMMddHHmmss形式にするにはどうするか
年月日に加えて時分秒も含めたい場合は、yyyyMMddHHmmssを使います。
C#DateTime now = new DateTime(2026, 6, 19, 15, 30, 45);
string result = now.ToString("yyyyMMddHHmmss", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619153045
内訳は次のとおりです。
yyyy : 年
MM : 月
dd : 日
HH : 時間 24時間表記
mm : 分
ss : 秒
ここでも、MMとmmの違いに注意してください。
MM : 月
mm : 分
ファイル名に日時を含める場合にも便利です。
C#string fileName = $"log_{DateTime.Now:yyyyMMddHHmmss}.txt";
文字列からDateTimeに変換する場合は、同じフォーマットを指定します。
C#string text = "20260619153045";
DateTime date = DateTime.ParseExact(
text,
"yyyyMMddHHmmss",
CultureInfo.InvariantCulture
);
Console.WriteLine(date); // 2026/06/19 15:30:45
7-3. スラッシュ付きの日付をyyyyMMddに変換するには
2026/06/19のようなスラッシュ付きの日付をyyyyMMddに変換するには、いったんDateTimeに変換してからToString("yyyyMMdd")を使います。
C#string input = "2026/06/19";
DateTime date = DateTime.ParseExact(
input,
"yyyy/MM/dd",
CultureInfo.InvariantCulture
);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619
月や日がゼロ埋めされていない場合は、フォーマットをyyyy/M/dにします。
C#string input = "2026/6/9";
DateTime date = DateTime.ParseExact(
input,
"yyyy/M/d",
CultureInfo.InvariantCulture
);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260609
複数の入力形式に対応したい場合は、フォーマットの配列を指定できます。
C#string input = "2026/6/9";
string[] formats =
{
"yyyy/MM/dd",
"yyyy/M/d",
"yyyy-MM-dd",
"yyyy-M-d"
};
if (DateTime.TryParseExact(
input,
formats,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result);
}
else
{
Console.WriteLine("日付形式が不正です。");
}
7-4. 文字列の日付が8桁か判定するには
文字列が8桁の数字かどうかを判定するには、Lengthとchar.IsDigitを使います。
C#string text = "20260619";
bool isEightDigits = text.Length == 8 && text.All(char.IsDigit);
Console.WriteLine(isEightDigits); // True
nullの可能性がある場合は、次のように書きます。
C#string? text = "20260619";
bool isEightDigits =
!string.IsNullOrEmpty(text) &&
text.Length == 8 &&
text.All(char.IsDigit);
Console.WriteLine(isEightDigits); // True
ただし、8桁の数字であることと、正しい日付であることは別です。
C#string text = "20260230";
bool isEightDigits = text.Length == 8 && text.All(char.IsDigit);
Console.WriteLine(isEightDigits); // True
このように、存在しない日付でも8桁チェックだけなら通ってしまいます。
日付として正しいかどうかも確認する場合は、TryParseExactを使います。
C#public static bool IsValidYyyyMMdd(string? text)
{
if (string.IsNullOrWhiteSpace(text))
{
return false;
}
return DateTime.TryParseExact(
text,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out _
);
}
7-5. .NET Frameworkと.NETで書き方に違いはあるか
基本的な書き方は、.NET Frameworkでも.NETでも同じです。
C#DateTime date = new DateTime(2026, 6, 19);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
文字列からDateTimeへ変換する場合も同じように書けます。
C#DateTime date = DateTime.ParseExact(
"20260619",
"yyyyMMdd",
CultureInfo.InvariantCulture
);
TryParseExactも同様に使えます。
C#bool success = DateTime.TryParseExact(
"20260619",
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
ただし、C#の言語バージョンによっては、nullable参照型のstring?などが使えない場合があります。
C#// 新しいC#でよく使う書き方
string? text = null;
古いプロジェクトでは、次のように通常のstringとして扱うことがあります。
C#string text = null;
日付フォーマットの指定方法自体は大きく変わりません。重要なのは、yyyyMMddの指定、CultureInfo.InvariantCultureの指定、ParseExactまたはTryParseExactの使い分けです。
まとめ
C#で日付をyyyyMMdd形式に変換するには、DateTime.ToString("yyyyMMdd")を使います。
C#DateTime date = new DateTime(2026, 6, 19);
string result = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine(result); // 20260619
現在日付をyyyyMMdd形式にしたい場合は、次のように書けます。
C#string today = DateTime.Today.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
反対に、yyyyMMdd形式の文字列をDateTimeへ変換する場合は、ParseExactまたはTryParseExactを使います。
C#DateTime date = DateTime.ParseExact(
"20260619",
"yyyyMMdd",
CultureInfo.InvariantCulture
);
外部入力やCSV、APIなど、不正な値が来る可能性がある場合はTryParseExactを使うと安全です。
C#bool success = DateTime.TryParseExact(
"20260619",
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date
);
yyyyMMdd形式を扱うときは、次の点に注意しましょう。
・年はyyyyを使う
・月はMMを使う
・分のmmと間違えない
・8桁の数字でも存在しない日付はある
・日付計算は文字列ではなくDateTimeで行う
・外部連携ではCultureInfo.InvariantCultureを指定すると安全
・タイムゾーンが関係する場合はDateTimeOffsetも検討する
yyyyMMddは実務でよく使われる便利な日付形式ですが、あくまで文字列表現です。内部処理ではDateTimeやDateTimeOffsetを使い、表示・ファイル名・API連携など必要な場面でyyyyMMdd形式に変換するのが、C#で日付を安全に扱う基本です。

