カスタム日時形式文字列内で文字列を明示して表現するコードを紹介します。
DateTime.ToString()
メソッドでカスタム日時形式文字列を利用すると指定した形式で時刻や日時を整形した文字列を取得できます。
カスタム日時形式文字列で文字列を表現しようとした場合、フォーマットの文字と衝突してしまうことがあります。
この記事では、カスタム日時式文字列で明示的に文字列を表現する方法を紹介します。
カスタム日時形式文字列の "リテラル文字列" を利用します。書式は次の通りです。
または
最初に書式指定文字と衝突する例のコードを記述して動作を確認します。
Windows フォームアプリケーションを作成し下図のフォームを作成します。
下記のコードを記述します。
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 LiteralStringDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string dtstr = DateTime.Now.ToString("Year:yyyy - Month:MM - Day:dd");
textBox1.Text = dtstr;
}
}
}
プロジェクトを実行します。下図のフォームが表示されます。
[Test1]ボタンをクリックします。テキストボックスに文字列が表示されます。
カスタム日時形式文字列 で"Month" と表示したいですが、"M"の文字が日時の「月」の書式、"t"の文字が時刻の「AM/PM 指定子の最初の文字」の書式、"h"の文字が時刻の「時」の書式のため、"Month"ではなく
(分)on(AM/PM 指定子の最初の文字)(時)
という表示になってしまいます。
また、"Day" の部分の表示も "y"の文字が西暦年の下2桁を表すため、"Day"ではなく Da(西暦の下2桁)
という表示になってしまいます。
コードを修正します。
下図のフォームを作成します。先ほどのフォームにボタンを一つ追加します。
以下のコードを記述します。
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 LiteralStringDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
string dtstr = DateTime.Now.ToString("\"Year:\"yyyy - \"Month:\"MM - \"Day:\"dd");
textBox1.Text = dtstr;
}
}
}
カスタム日時形式文字列で明示的に文字列として表示したい文字を 「"」で囲むことで、書式指定の文字列ではなく表示する文字列として明示できます。
「"」は文字列の開始、終端を示す記号のため文字列内に記述する場合は 「\"」と記述します。
private void button2_Click(object sender, EventArgs e)
{
string dtstr = DateTime.Now.ToString("\"Year:\"yyyy - \"Month:\"MM - \"Day:\"dd");
textBox1.Text = dtstr;
}
「'」(シングルクォート)で囲むことでもリテラル文字列を表現できますので、下記のコードでも同様に動作します。
private void button2_Click(object sender, EventArgs e)
{
string dtstr = DateTime.Now.ToString("'Year:'yyyy - 'Month:'MM - 'Day:'dd");
textBox1.Text = dtstr;
}
プロジェクトを実行します。下図のウィンドウが表示されます。
[Test2]のボタンをクリックします。テキストボックスに文字列が表示されます。
シングルクォートやダブルクォートで囲んだ Year Month Day が文字列として表示できていることが確認できます。