DateTimeオブジェクトの時刻・日付から形式を指定して文字列に変換する - DateTimeからstringへの変換
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より抜粋した標準の形式パターンです。
形式パターン | 説明 |
d | ShortDatePattern (日本語は"yyyy/MM/dd",USは"M/d/yyyy"など) |
D | LongDatePattern (日本語は"yyyy'?'M'?'d'?'") |
f | 完全な日付と時刻 (長い日付と短い時刻)。 |
F | FullDateTimePattern (長い日付と長い時刻)。 |
g | 一般 (短い日付と短い時刻)。 |
G | 一般 (短い日付と長い時刻)。 |
m, M | MonthDayPattern (日本語では"M'?'d'?'") |
o,O | ラウンド トリップ日時のパターン。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。 |
r,R | RFC1123Pattern。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。 |
s | 現地時間を使用する SortableDateTimePattern (ISO 8601 準拠)。この形式パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます。 |
t | ShortTimePattern |
T | LongTimePattern |
u | 世界協定時刻の表示形式を使用する UniversalSortableDateTimePattern。この形式設定パターンを使用すると、形式設定操作または解析操作で常にインバリアント カルチャが使用されます |
U | 世界協定時刻を使用する完全な日付と時刻 (長い日付と長い時刻)。 |
y, Y | YearMonthPattern |
プログラム例 (カスタム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 が付きます。 |
ddd | AbbreviatedDayNames の定義に基づく、曜日の省略名。 |
dddd | DayNames の定義に基づく、曜日の完全名。 |
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 または %h | 12 時間形式の時間。1 桁の時間に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%h" を指定します。 |
hh | 12 時間形式の時間。1 桁の時間には、先頭に 0 が付けられます。 |
H または %H | 24 時間形式の時間。1 桁の時間に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%H" を指定します。 |
HH | 24 時間形式の時間。1 桁の時間には、先頭に 0 が付けられます。 |
K | Kind プロパティの別の値。つまり、ローカル時刻、世界協定時刻 (UTC)、または指定なしです。 |
m または %m | 分。1 桁の分に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%m" を指定します。 |
mm | 分。1 桁の分には、先頭に 0 が付きます。 |
M または %M | 月を表す数値。1 桁の月に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%M" を指定します。 |
MM | 月を表す数値。1 桁の月には、先頭に 0 が付きます。 |
MMM | AbbreviatedMonthNames の定義に基づく、月の省略名。 |
MMMM | MonthNames の定義に基づく、月の完全名。 |
s または %s | 秒。1 桁の秒に先行ゼロは付きません。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%s" を指定します。 |
ss | 秒。1 桁の秒には、先頭に 0 が付きます。 |
t または %t | AMDesignator または PMDesignator で定義される AM/PM 指定子の最初の文字がある場合、その文字。 この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%t" を指定します。 |
tt | AMDesignator または PMDesignator で定義される AM/PM 指定子がある場合、その文字。 AM と PM を区別する必要のある言語の場合、アプリケーションではこの形式パターンを使用する必要があります。たとえば、日本語の場合、AM/PM 指定子の 2 番目の文字は異なりますが、先頭文字は同じです。 |
y または %y | 世紀を指定しない年。世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けずに表示されます。この形式パターンが他の形式パターンと組み合わされていない場合、アプリケーションは "%y" を指定します。 |
yy | 世紀を指定しない年。世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けて表示されます。 |
yyy | 3 桁で表す年。年が 100 未満の場合、その年は先行ゼロが付いて表示されます。 |
yyyy | 使用する暦に応じて 4 桁または 5 桁で表す年。世紀を含みます。4 桁になるよう先行ゼロが埋め込まれます。タイ仏暦と韓国暦では、5 桁の年を使用します。5 桁を使用する暦の場合、"yyyy" のパターンを選択しているユーザーには、5 桁すべてが先行ゼロなしで表示されます。例外として、日本および台湾の暦は、常に "yy" が選択されているかのように動作します。 |
yyyyy | 5 桁で表す年。5 桁になるよう先行ゼロが埋め込まれます。例外として、日本および台湾の暦は、常に "yy" が選択されているかのように動作します。 |
yyyyyy | 6 桁で表す年。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" のように指定します。形式パターンがリテラル文字またはその他の形式パターンと組み合わされている場合、"%" 文字は省略できます。 |
\c | c は任意の文字です。 文字をそのまま表示します。アプリケーションでバックスラッシュ文字を表示するには、"\\" を使用してください。 |
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用