また、Parseメソッドに対するTryParseメソッドと同様、ParseExactメソッドにも変換できなかった場合でも例外をスローしないTryParseExactメソッドが存在します。 例外をキャッチするかわりに、変換できたかどうかで条件分岐させたい場合はTryParseExactメソッドを使うことができます。
DateTime/DateTimeOffset.TryParseExactメソッドで書式を指定して文字列からの変換を試みる
Imports System
Imports System.Globalization
Class Sample
Shared Sub Main()
Dim inputs() As String = New String() { _
"Mon, 01 Apr 2013 15:00:30 GMT", _
"2013年4月1日 15:00:30", _
"2013-04-01T15:00:30.1230000+09:00", _
"2013-04-01T15:00:30.1230000", _
"2013-04-01", _
"15:00:30" _
}
For Each input As String In inputs
Dim dt As DateTime
' 書式"o"で文字列からDateTimeへの変換を試行する
If DateTime.TryParseExact(input, "o", Nothing, DateTimeStyles.None, dt) Then
Console.WriteLine("{0,-35} -> {1}", input, dt)
Else
Console.WriteLine("{0,-35} -> (invalid format)", input)
End If
Next
Console.WriteLine()
For Each input As String In inputs
Dim dto As DateTimeOffset
' 書式"o"で文字列からDateTimeOffsetへの変換を試行する
If DateTimeOffset.TryParseExact(input, "o", Nothing, DateTimeStyles.None, dto) Then
Console.WriteLine("{0,-35} -> {1}", input, dto)
Else
Console.WriteLine("{0,-35} -> (invalid format)", input)
End If
Next
Console.WriteLine()
End Sub
End Class
実行結果
Mon, 01 Apr 2013 15:00:30 GMT -> (invalid format) 2013年4月1日 15:00:30 -> (invalid format) 2013-04-01T15:00:30.1230000+09:00 -> 2013/04/01 15:00:30 2013-04-01T15:00:30.1230000 -> 2013/04/01 15:00:30 2013-04-01 -> (invalid format) 15:00:30 -> (invalid format) Mon, 01 Apr 2013 15:00:30 GMT -> (invalid format) 2013年4月1日 15:00:30 -> (invalid format) 2013-04-01T15:00:30.1230000+09:00 -> 2013/04/01 15:00:30 +09:00 2013-04-01T15:00:30.1230000 -> 2013/04/01 15:00:30 +09:00 2013-04-01 -> (invalid format) 15:00:30 -> (invalid format)
このように、変換できたかどうかの結果はtrue
/false
の値として返される、変換できた場合は結果をoutパラメータで受け取る、といった点はTryParseメソッドと同様です。 一方、TryParseExactメソッドでは変換時のオプションをDateTimeStyles
で指定する必要があります。 DateTimeStylesについては別途解説します。