VB.NET YYYYMMDD形式の文字列を日付型に型変換する
VB.NET
でYYYYMMDD
形式の文字列を日付型に型変換する方法を紹介します。
区切り文字を追加
最初にYYYY/MM/DD
のように、年月日の区切りに/
を追加します。
Dim value As String = "20170123"
value = value.Substring(0, 4) & "/" & value.Substring(4, 2) & "/" & value.Substring(6, 2)
型変換
/
区切りの文字列にするとCDate
で日付型に型変換できるようになります。
Dim date1 As Date
date1 = CDate(value)
注意点
上記処理をファンクションにして共通化する場合、以下の注意が必要です。
Substringで文字列より長い文字列を指定するとエラーになる
例えば201701
のように6文字しかない文字列に対してSubstring
で7文字目以降を見に行くような指定をするとエラーが発生します。
エラーになる
Dim value As String = "201701"
value = value.Substring(0, 4) & "/" & value.Substring(4, 2) & "/" & value.Substring(6, 2)
CDateで日付型に変換できない場合はエラーになる
/
区切りにしたとき、文字列が2017/01/32
のように、存在しない日付やaaaa/bb/cc
のようにそもそも数値でない場合、CDate
で日付型に型変換しようとするとエラーが発生します。
チェック処理を追加
上記のチェックを加えて、YYYYMMDD
形式の文字列を日付型に型変換する共通ファンクションを作成します。
Function YYYYMMDDToDate(value As String) As Date
Dim formatedValue As String
'8文字でない場合は処理終了
If value.Length <> 8 Then Return Nothing
'/区切りの文字列に変換
formatedValue = value.Substring(0, 4) & "/" & value.Substring(4, 2) & "/" & value.Substring(6, 2)
'日付型に変換できない場合は処理終了
If Not IsDate(formatedValue) Then Return Nothing
'日付型に変換して返却
Return CDate(formatedValue)
End Function