C# で日付や時刻を扱う際に基本となる s
DateTime 型。これを画面に表示したり、ファイルに保存したりする際には、文字列に変換する必要があります。本記事では、DateTime 型を様々な形式の文字列に変換する基本的な方法と、よく使われる書式指定子について解説します。ToString() メソッドの基本
DateTime 型のインスタンスを文字列に変換する最も基本的な方法は、ToString() メソッドを使用することです。引数を指定しない場合、現在のカルチャー(CultureInfo)に基づいた短い形式で文字列化されます。DateTime now = DateTime.Now;
string defaultFormat = now.ToString();
Console.WriteLine(defaultFormat); // 例: 2025/04/07 12:23:45
標準書式指定子
ToString() メソッドには、様々な標準書式指定子を引数として渡すことで、出力される文字列の形式を細かく制御できます。よく使われるものをいくつか紹介します。
| 書式指定子 | 説明 | 例 (2025年4月7日 12時23分45秒 の場合) |
|---|---|---|
d |
短い日付形式 | 2025/04/07 |
D |
長い日付形式 | 2025年4月7日 |
t |
短い時刻形式 | 12:23 |
T |
長い時刻形式 (秒まで) | 12:23:45 |
f |
完全な短い形式 (短い日付 + 短い時刻) | 2025年4月7日 12:23 |
F |
完全な長い形式 (長い日付 + 長い時刻) | 2025年4月7日 12:23:45 |
g |
一般的な短い形式 (短い日付 + 短い時刻) | 2025/04/07 12:23 |
G |
一般的な長い形式 (短い日付 + 長い時刻 (秒まで)) | 2025/04/07 12:23:45 |
s |
並べ替え可能な日付/時刻形式 (ISO 8601) | 2025-04-07T12:23:45 |
u |
UTC の並べ替え可能な日付/時刻形式 | 2025-04-07 03:23:45Z |
y |
年と月 | 2025年4月 |
Y |
年と月 (長い形式) | 2025年4月 |
これらの書式指定子は、ToString() メソッドの引数に文字列として渡します。
DateTime now = DateTime.Now;
string shortDate = now.ToString("d");
string longDate = now.ToString("D");
string shortTime = now.ToString("t");
string longTime = now.ToString("T");
Console.WriteLine($"短い日付: {shortDate}");
Console.WriteLine($"長い日付: {longDate}");
Console.WriteLine($"短い時刻: {shortTime}");
Console.WriteLine($"長い時刻: {longTime}");
カスタム書式指定子
さらに細かく出力形式を制御したい場合は、カスタム書式指定子を使用できます。これは、特定のパターンを表す文字列を ToString() メソッドに渡すことで実現します。
| カスタム書式 | 説明 | 例 (2025年4月7日 12時23分45秒 の場合) |
|---|---|---|
yyyy |
4 桁の年 | 2025 |
yy |
2 桁の年 | 25 |
MMMM |
月の完全名 | 4月 |
MMM |
月の省略名 | 4月 |
MM |
2 桁の月 (1 桁の場合は先頭に 0) | 04 |
M |
月 (先頭の 0 は省略) | 4 |
dddd |
曜日の完全名 | 月曜日 |
ddd |
曜日の省略名 | 月 |
dd |
2 桁の日 (1 桁の場合は先頭に 0) | 07 |
d |
日 (先頭の 0 は省略) | 7 |
HH |
24 時間形式の時 (1 桁の場合は先頭に 0) | 12 |
H |
24 時間形式の時 (先頭の 0 は省略) | 12 |
hh |
12 時間形式の時 (1 桁の場合は先頭に 0) | 12 |
h |
12 時間形式の時 (先頭の 0 は省略) | 12 |
mm |
分 (1 桁の場合は先頭に 0) | 23 |
m |
分 (先頭の 0 は省略) | 23 |
ss |
秒 (1 桁の場合は先頭に 0) | 45 |
s |
秒 (先頭の 0 は省略) | 45 |
tt |
午前/午後 (AM/PM) | 午後 |
これらのカスタム書式指定子を組み合わせることで、自由な形式の文字列を作成できます。
DateTime now = DateTime.Now;
string customFormat1 = now.ToString("yyyy年MM月dd日(ddd)");
string customFormat2 = now.ToString("HH:mm:ss");
string customFormat3 = now.ToString("MM/dd hh:mm tt");
Console.WriteLine($"カスタム形式1: {customFormat1}");
Console.WriteLine($"カスタム形式2: {customFormat2}");
Console.WriteLine($"カスタム形式3: {customFormat3}");
カルチャーによる書式設定
ToString() メソッドは、省略可能な IFormatProvider インターフェースを実装したオブジェクトを引数に取ることで、特定のカルチャー(地域)に基づいた書式で出力できます。CultureInfo クラスを使用すると、様々なカルチャーの情報を指定できます。
using System.Globalization;
DateTime now = DateTime.Now;
CultureInfo usCulture = new CultureInfo("en-US");
CultureInfo jpCulture = new CultureInfo("ja-JP");
string usFormat = now.ToString(usCulture);
string jpFormat = now.ToString(jpCulture);
string usLongDate = now.ToString("D", usCulture);
string jpLongDate = now.ToString("D", jpCulture);
Console.WriteLine($"アメリカ (デフォルト): {usFormat}");
Console.WriteLine($"日本 (デフォルト): {jpFormat}");
Console.WriteLine($"アメリカ (長い日付): {usLongDate}");
Console.WriteLine($"日本 (長い日付): {jpLongDate}");
まとめ
C# の DateTime 型を文字列に変換するには、ToString() メソッドを使用し、必要に応じて標準書式指定子やカスタム書式指定子を指定することで、様々な形式の文字列を得ることができます。また、CultureInfo を指定することで、特定の地域に合わせた書式で出力することも可能です。これらの方法を理解し、状況に応じて適切な変換方法を選択してください。
関連記事
java の記事も書きました。 taglibrary.hatenablog.com