DateTimeオブジェクトの時刻・日付から形式を指定して文字列に変換する - DateTimeからstringへの変換 - C#

DateTime型から文字列への変換コードを紹介します。

概要

DateTime型の時刻日付クラスをフォーマット形式を指定して文字列型に変換する場合はToString()メソッドを用います。
ToStringメソッドの引数に形式指定文字列を与えることで、指定した書式で日時の文字列を表示できます。

書式

(DateTimeオブジェクト).ToString("(フォーマット文字列)")

コード記述例

DateTimeオブジェクトの dt を "yyyy-MM-dd HH-mm-ss ffff zzz" の形式の文字列に変換します。
「2019-10-24 23-14-22 2452 +09:00」の形式の文字列が出力されます。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text = dt.ToString("yyyy-MM-dd HH-mm-ss ffff zzz");
    }
  }
}

プログラム例 (標準DateTimeパターンの例)

形式パターンを用いた文字列変換のサンプルプログラムです。

UI

下図のUIを準備します。

コード

下記のコードを記述します。それぞれのボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DateTimeToString
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("d")+"\r\n";

    }

    private void button2_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("D") + "\r\n";

    }

    private void button3_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("u") + "\r\n";

    }

    private void button4_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("U") + "\r\n";

    }

    private void button5_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("f") + "\r\n";

    }

    private void button6_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("F") + "\r\n";

    }
  }
}

解説

button1

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "d" が与えられていますので、ShortDatePattern の"yyyy/MM/dd" 具体的には「2019/05/10」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("d")+"\r\n";

button2

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "D" が与えられていますので、LongDatePattern の"yyyy?M?d" 具体的には「2019年5月10日」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("D")+"\r\n";

button3

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "u" が与えられていますので、UniversalSortableDateTimePattern の"yyyy-MM-dd hh:mm:ss" 具体的には「2019-05-10 15:05:08」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("u")+"\r\n";

button4

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "U" が与えられていますので、世界協定時刻を使用する完全な日付と時刻 (長い日付と長い時刻)の"yyyy?M?d hh:mm:s" 具体的には「2019年5月10日 15:05:08」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("U")+"\r\n";

button5

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "f" が与えられていますので、完全な日付と時刻 の"yyyy?M?d hh:mm" 具体的には「2019年5月10日 15:05」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("f")+"\r\n";

button6

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "F" が与えられていますので、FullDateTimePattern の"yyyy?M?d hh:mm:ss" 具体的には「2019年5月10日 15:05:08」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("F")+"\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。"yyyy/MM/dd"形式の文字列がテキストボックスに表示されます。


[button2]~[button6]まで続けて押します。それぞれのボタンで指定した標準の書式パターンでの文字列がテキストボックスに表示されます。

標準DateTimeパターン

MSDNより抜粋した標準の形式パターンです。
形式パターン説明
dShortDatePattern (日本語は"yyyy/MM/dd",USは"M/d/yyyy"など)
DLongDatePattern (日本語は"yyyy'?'M'?'d'?'")
f完全な日付と時刻 (長い日付と短い時刻)。
FFullDateTimePattern (長い日付と長い時刻)。
g一般 (短い日付と短い時刻)。
G一般 (短い日付と長い時刻)。
m, MMonthDayPattern (日本語では"M'?'d'?'")
o,Oラウンド トリップ日時のパターン。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。
r,RRFC1123Pattern。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。
s現地時間を使用する SortableDateTimePattern (ISO 8601 準拠)。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。
tShortTimePattern
TLongTimePattern
u世界協定時刻の表示形式を使用する UniversalSortableDateTimePattern。この形式設定パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます
U世界協定時刻を使用する完全な日付と時刻 (長い日付と長い時刻)。
y, YYearMonthPattern

プログラム例 (カスタムDateTimeパターンの例)

UI

下図のUIを作成します。ボタンと複数行テキストボックスを配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DateTimeToString
{
  public partial class FormCustomFormat : Form
  {
    public FormCustomFormat()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("dd(ddd)-MM-yyyy zzz") + "\r\n";
    }

    private void Button2_Click(object sender, EventArgs e)
    {
      DateTime dt = DateTime.Now;
      textBox1.Text += dt.ToString("yyyy年M月d日 (dddd) HH:mm:ss [zzz]") + "\r\n";
    }
  }
}

解説

button1

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "dd(ddd)-MM-yyyy zzz" が与えられていますので、「20(火)-08-2019 +09:00」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("dd(ddd)-MM-yyyy zzz") + "\r\n";

button2

DateTime.Now プロパティで現在の日時を取得します。ToStringメソッドで文字列に変換します。ToStringメソッドの第一引数に "yyyy年M月d日 (dddd) HH:mm:ss [zzz]" が与えられていますので、「2019年8月20日 (火曜日) 15:35:20 +09:00」の形式で文字列に変換されます。
  DateTime dt = DateTime.Now;
  textBox1.Text += dt.ToString("yyyy年M月d日 (dddd) HH:mm:ss [zzz]") + "\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。"dd(ddd)-MM-yyyy zzz"のフォーマットで現在時刻が文字列に変換されて表示できます。


[button2]をクリックします。"yyyy年M月d日 (dddd) HH:mm:ss [zzz]"のフォーマットで現在時刻が文字列に変換されて表示できます。

カスタムDateTimeパターン

カスタムの時刻表示指定書式です。

形式パターン説明
d または %dその月の日付。1 桁の日付に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%d" を指定します。
ddその月の日付。1 桁の日には、先頭に 0 が付きます。
dddAbbreviatedDayNames の定義に基づく、曜日の省略名。
ddddDayNames の定義に基づく、曜日の完全名。
f または %f精度 1 桁の秒の端数。残りの桁は切り捨てられます。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%f" を指定します。
ff精度 2 桁の秒の端数。残りの桁は切り捨てられます。
fff精度 3 桁の秒の端数。残りの桁は切り捨てられます。
ffff精度 4 桁の秒の端数。残りの桁は切り捨てられます。
fffff精度 5 桁の秒の端数。残りの桁は切り捨てられます。
ffffff精度 6 桁の秒の端数。残りの桁は切り捨てられます。
fffffff精度 7 桁の秒の端数。残りの桁は切り捨てられます。
F または %F秒の端数の最も上位の桁が表示されます。その桁がゼロの場合には、何も表示されません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%F" を指定します。
FF秒の端数の上位 2 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
FFF秒の端数の上位 3 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
FFFF秒の端数の上位 4 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
FFFFF秒の端数の上位 5 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
FFFFFF秒の端数の上位 6 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
FFFFFFF秒の端数の上位 7 桁が表示されます。ただし、末尾の 0 は表示されません。2 桁とも 0 の場合は、どちらも表示されません。
gg時期または時代 (年号)。形式指定される日付に、関連付けられた時期または時代 (年号) の文字列がない場合、このパターンは無視されます。
h または %h12 時間形式の時間。1 桁の時間に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%h" を指定します。
hh12 時間形式の時間。1 桁の時間には、先頭に 0 が付けられます。
H または %H24 時間形式の時間。1 桁の時間に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%H" を指定します。
HH24 時間形式の時間。1 桁の時間には、先頭に 0 が付けられます。
KKind プロパティの別の値。つまり、ローカル時刻、世界協定時刻 (UTC)、または指定なしです。
m または %m分。1 桁の分に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%m" を指定します。
mm分。1 桁の分には、先頭に 0 が付きます。
M または %M月を表す数値。1 桁の月に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%M" を指定します。
MM月を表す数値。1 桁の月には、先頭に 0 が付きます。
MMMAbbreviatedMonthNames の定義に基づく、月の省略名。
MMMMMonthNames の定義に基づく、月の完全名。
s または %s秒。1 桁の秒に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%s" を指定します。
ss秒。1 桁の秒には、先頭に 0 が付きます。
t または %tAMDesignator または PMDesignator で定義される AM/PM 指定子の最初の文字がある場合、その文字。 この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%t" を指定します。
ttAMDesignator または PMDesignator で定義される AM/PM 指定子がある場合、その文字。 AM と PM を区別する必要のある言語の場合、アプリケーションではこの形式パターンを使用する必要があります。たとえば、日本語の場合、AM/PM 指定子の 2 番目の文字は異なりますが、先頭文字は同じです。
y または %y世紀を指定しない年。世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けずに表示されます。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%y" を指定します。
yy世紀を指定しない年。世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けて表示されます。
yyy3 桁で表す年。年が 100 未満の場合、その年は先行ゼロが付いて表示されます。
yyyy使用する暦に応じて 4 桁または 5 桁で表す年。世紀を含みます。4 桁になるよう先行ゼロが埋め込まれます。タイ仏暦と韓国暦では、5 桁の年を使用します。5 桁を使用する暦の場合、"yyyy" のパターンを選択しているユーザーには、5 桁すべてが先行ゼロなしで表示されます。例外として、日本および台湾の暦は、常に "yy" が選択されているかのように動作します。
yyyyy5 桁で表す年。5 桁になるよう先行ゼロが埋め込まれます。例外として、日本および台湾の暦は、常に "yy" が選択されているかのように動作します。
yyyyyy6 桁で表す年。6 桁になるよう先行ゼロが埋め込まれます。例外として、日本および台湾の暦は、常に "yy" が選択されているかのように動作します。このパターンでは、先行ゼロの埋め込みを続けて "y" の文字列をさらに長くすることもできます。
z または %zタイム ゾーン オフセット ("+" または "-" の後ろに時間だけを表記)。1 桁の時間に先行ゼロは付きません。たとえば、太平洋標準時では "-8" です。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%z" を指定します。
zzタイム ゾーン オフセット ("+" または "-" の後ろに時間だけを表記)。1 桁の時間には、先頭に 0 が付けられます。たとえば、太平洋標準時では "-08" です。
zzz完全タイム ゾーン オフセット ("+" または "-" の後ろに時間と分を表記)。1 桁の時間と分には先行ゼロが付きます。たとえば、太平洋標準時では "-08:00" です。
:TimeSeparator で定義される既定の時間区切り記号。
/DateSeparator で定義される既定の日付区切り記号。
%c単独で使用される場合、 c は形式パターンです。 アプリケーションで形式パターン "d"、"f"、"F"、"h"、"m"、"s"、"t"、"y"、"z"、"H"、または "M" を単独で使用するには、それぞれ "%d"、"%f"、"%F"、"%h"、"%m"、"%s"、"%t"、"%y"、"%z"、"%H"、または "%M" のように指定します。形式パターンがリテラル文字またはその他の形式パターンと組み合わされている場合、"%" 文字は省略できます。
\cc は任意の文字です。 文字をそのまま表示します。アプリケーションでバックスラッシュ文字を表示するには、"\\" を使用してください。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2011-01-01
iPentec all rights reserverd.