VB.NETにおける、日付を「20200101」(yyyymmdd形式)や「2020年01月01日02時03分04秒」(yyyy年MM月dd日hh時mm分ss秒形式)の様に扱う方法です。覚えれば簡単なのでサクッと覚えてしまいましょう。
C#の記事はコチラから
日付をカスタム書式指定文字列で変換する
カスタム書式指定文字とは
MSDNに「カスタム書式指定文字」の説明がありますがサッパリな人が多いと思います。簡単に言えば「ToStringメソッドを使って、指定した書式で出力できる」ということです。0埋めや桁数、小数点を桁を合わせるなど、色んな場面で使用します。もちろん、日付もカスタム書式指定文字が使えます。
で、今回は日付のお話なので、例として実行ボタンを押すと日付が出て来るフォームを作りました。
実際にソースを書いて確認してみましょう。
yyyyMMdd形式
日付によくある「yyyymmdd」という書式です。具体的には「20200101」となります。DateTime型の変数にDateTime.Nowを代入し、ToStringメソッドの引数に書式文字を入れます。
Private Sub cmdCreateDateTime1_Click(sender As Object, e As EventArgs) Handles cmdCreateDateTime1.Click Try 'カスタム書式指定文字列を用いて日付時刻を出力 Dim strOutPut As String = Nothing Dim objDateTime As DateTime = DateTime.Now 'yyyyMMdd形式 strOutPut = objDateTime.ToString("yyyyMMdd") MessageBox.Show(strOutPut, "yyyyMMdd形式") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
実際に実行してみます。
「20200623」と出てきました。「yyyymmdd」形式で出力されていますね。
yyyyMMddHHmmss形式
日付だけじゃ物足りない!秒まで欲しい!という場合は「yyyyMMddHHmmss」という書式です。
Private Sub cmdCreateDateTime1_Click(sender As Object, e As EventArgs) Handles cmdCreateDateTime1.Click Try 'カスタム書式指定文字列を用いて日付時刻を出力 Dim strOutPut As String = Nothing Dim objDateTime As DateTime = DateTime.Now 'yyyyMMddHHmmss形式 strOutPut = objDateTime.ToString("yyyyMMdd HHmmss") MessageBox.Show(strOutPut, "yyyyMMddHHmmss形式") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
実際に実行してみます。
時分秒まで出てきましたね。時分秒まで出しましたが、時分だけでいい場合は「yyyyMMddHHmm」として下さい。
【小技】年月日と時分秒の間にスペースを入れたい場合は、“yyyyMMdd HHmmss”と指定すれば、「20200101 010203」で扱えます。
yyyy/MM/dd HH:mm:ss形式
こちらも日付によくある形式で、スラッシュやコロンが入った形式です。「yyyy/MM/dd HH:mm:ss」と指定すると、「2020/01/02 03:04:05」となります。
Private Sub cmdCreateDateTime1_Click(sender As Object, e As EventArgs) Handles cmdCreateDateTime1.Click Try 'カスタム書式指定文字列を用いて日付時刻を出力 Dim strOutPut As String = Nothing Dim objDateTime As DateTime = DateTime.Now 'yyyy/MM/dd HH:mm:ss形式 strOutPut = objDateTime.ToString("yyyy/MM/dd HH:mm:ss") MessageBox.Show(strOutPut, "yyyy/MM/dd HH:mm:ss形式") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
実際に実行してみます。
スラッシュとコロンがついて表示されていますね。
yyyy年MM月dd日hh時mm分ss秒形式
いやいや「年月日」という文字も出したいんだ!という人は、「yyyy年MM月dd日hh時mm分ss秒」と指定しましょう。
Private Sub cmdCreateDateTime1_Click(sender As Object, e As EventArgs) Handles cmdCreateDateTime1.Click Try 'カスタム書式指定文字列を用いて日付時刻を出力 Dim strOutPut As String = Nothing Dim objDateTime As DateTime = DateTime.Now 'yyyy年MM月dd日hh時mm分ss秒形式 strOutPut = objDateTime.ToString("yyyy年MM月dd日hh時mm分ss秒") MessageBox.Show(strOutPut, "yyyy年MM月dd日hh時mm分ss秒形式") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
実際に実行してみます。
はい、「年月日時分秒」の文字がくっついてますね。
不要な0を表示させたくない場合
「yyyy年MM月dd日hh時mm分ss秒」形式で不要な0を表示させたくない場合があると思います。「2020年1月1日2時3分5秒」って出したいんだ!という人ですね。その場合、objDateTime.ToString(“yyyy年MM月dd日hh時mm分ss秒”)の部分をobjDateTime.ToString(“yyyy年M月d日h時m分s秒”)と指定してあげます。
Private Sub cmdCreateDateTime1_Click(sender As Object, e As EventArgs) Handles cmdCreateDateTime1.Click Try 'カスタム書式指定文字列を用いて日付時刻を出力 Dim strOutPut As String = Nothing Dim objDateTime As DateTime = DateTime.Now 'yyyy年M月d日h時m分s秒形式 strOutPut = objDateTime.ToString("yyyy年M月d日h時m分s秒") MessageBox.Show(strOutPut, "yyyy年M月d日h時m分s秒形式") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
実際に実行してみます。
はい、見事に0埋めが無くなりました。
編集後記
カスタム書式指定文字列は、初心者にとっては敷居が高い感じがしますが、慣れると使いやすいので、サクッと覚えてしまった方が良いと思います。日付以外にも使用する場面があると思いますが、まずは日付で慣れてみましょう。
参考サイト
.