C#における、様々な形式の日付を扱う方法です。
日付をカスタム書式指定文字列で変換する
カスタム書式指定文字とは
まずは簡単に。
カスタム書式指定文字というのは、ひとことで言えば「ToStringメソッドを用いて、指定した書式で出力」することです。
色んな場面で使用することがあり、例えば、0埋めや、桁数・小数点を桁を合わせたい場合にカスタム書式指定文字を使います。
もちろん、本記事のテーマである日付も、カスタム書式指定文字が使えます。
サンプルとして次の画面を用意しました。
この画面の仕様は、ボタンをクリックすると、現在の日付が表示されるだけの簡単なものです。
クリックイベント直下に、日付のカスタム書式指定文字を用いて色んな日付形式を表示してみましょう。
yyyyMMdd形式
良くある「yyyyMMdd」という書式です。
2021年1月1日であれば、「20210101」と表示されます。
DateTime型の変数にDateTime.Nowを代入し、ToStringメソッドの引数に書式文字を設定します。
サンプルコードはこちら。
private void cmdDateTime_Click(object sender, EventArgs e) { try { //DateTime 構造体を用意 DateTime objDateTime = DateTime.Now; //書式設定してstring型変数に代入 string strDateTime = objDateTime.ToString("yyyyMMdd"); //テキストボックスに表示 txtOutPut.Text = strDateTime; } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
これを実行してみましょう。
yyyyMMdd形式(年月日8桁)で表示されました。
yyyyMMddHHmmss形式
年月日だけではなく、時分秒まで表示する書式は、
「yyyyMMddHHmmss」
を使います。
private void cmdDateTime_Click(object sender, EventArgs e) { try { //DateTime 構造体を用意 DateTime objDateTime = DateTime.Now; //書式設定してstring型変数に代入 string strDateTime = objDateTime.ToString("yyyyMMddHHmmss"); //テキストボックスに表示 txtOutPut.Text = strDateTime; } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
実際に実行してみましょう。
14桁の時分秒(HHmmss)まで出てきました。
yyyy/MM/dd HH:mm:ss形式
日付によくあるスラッシュやコロンが入った形式で表示したい場合、
「yyyy/MM/dd HH:mm:ss」
と指定します。上記のカスタム書式を指定すると、
「2021/01/02 03:04:05」
と表示されます。
private void cmdDateTime_Click(object sender, EventArgs e) { try { //DateTime 構造体を用意 DateTime objDateTime = DateTime.Now; //書式設定してstring型変数に代入 string strDateTime = objDateTime.ToString("yyyy/MM/dd HH:mm:ss"); //テキストボックスに表示 txtOutPut.Text = strDateTime; } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
実際に実行してみましょう。
スラッシュとコロンが表示されました。
yyyy年MM月dd日hh時mm分ss秒形式
「年月日」という文字も出したい場合、
「yyyy年MM月dd日hh時mm分ss秒」
と指定します。
private void cmdDateTime_Click(object sender, EventArgs e) { try { //DateTime 構造体を用意 DateTime objDateTime = DateTime.Now; //書式設定してstring型変数に代入 string strDateTime = objDateTime.ToString("yyyy年MM月dd日hh時mm分ss秒"); //テキストボックスに表示 txtOutPut.Text = strDateTime; } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
これも実行してみましょう。
「年月日時分秒」の文字がくっついて表示されました。
不要な0を表示させたくない場合
上記の「yyyy年MM月dd日hh時mm分ss秒」形式では、例えば、「2021年1月1日3時4分5秒」を表示させると、ゼロ埋めされて表示されます。
しかし、ゼロ埋めしたくない場合があると思いますので、その場合は、次の様に指定します。
yyyy年M月d日h時m分s秒
前項では「MM月」「dd日」と、Mやdを2つ並べていましたが、それを1つにします。
private void cmdDateTime_Click(object sender, EventArgs e) { try { //DateTime 構造体を用意 DateTime objDateTime = DateTime.Now; //書式設定してstring型変数に代入 string strDateTime = objDateTime.ToString("yyyy年M月d日h時m分s秒"); //テキストボックスに表示 txtOutPut.Text = strDateTime; } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
カスタム書式指定文字の仕様としては、例えば、「MM月」とした場合、必ず2桁を表示しますが、「M月」とすれば1~9月はゼロ埋めされずに1桁で表示されます。もちろん、10~12月の場合は2桁で表示されます。
関連リンク
DateTime 構造体 (System) | Microsoft Docs
.