文字列日時をDateTime型に変換するメソッド DateTime.ParseExact と DateTime.TryParseExact の使用例を紹介します。
以下によく使うと思われる、年月日時分秒を指定する日時形式文字列について記します。
詳細な情報は、以下のリンクを参照ください。
日時形式文字列 | 説明 |
yyyy | 年の4桁 |
MM | 月の2桁 |
dd | 日の2桁 |
hh | 時間の2桁(24時間) |
mm | 分の2桁 |
ss | 秒の2桁 |
DateTime.ParseExactとDateTime.TryParseExactの違いは、変換失敗時に例外を発生するか、日時変換成功/失敗時にTrue/Falseを返却するかの違いになります。
メソッド | 説明 |
DateTime.ParseExact | 変換失敗時は例外が発生します。 |
DateTime.TryParseExact | 変換成功時は、True, 失敗時はFalseを返却します。 成功時には引数で渡したDateTimeに変換した値が格納されます。 |
C#とVisual Basic(VB)のサンプルコードを紹介します。
using System; using System.Globalization; class Program { static void Main(string[] args) { String dt1str = @"2019/12/10 10:20:30"; String dt2str = @"2019/12/10 10:20:90"; String fmt = @"yyyy/MM/dd hh:mm:ss"; DateTime dt; // ParseExactのサンプル try { dt = DateTime.ParseExact(dt1str, fmt, null); Console.WriteLine("dt1str:" + dt); } catch (Exception ex) { Console.WriteLine("Exception:" + ex.Message); } try { dt = DateTime.ParseExact(dt2str, fmt, null); Console.WriteLine("dt2str:" + dt); } catch (Exception ex) { Console.WriteLine("Exception:" + ex.Message); } // TryParseExactのサンプル Boolean b; b = DateTime.TryParseExact(dt1str, fmt, null, DateTimeStyles.AssumeLocal, out dt); Console.WriteLine("dt1str:" + b); b = DateTime.TryParseExact(dt2str, fmt, null, DateTimeStyles.AssumeLocal, out dt); Console.WriteLine("dt2str:" + b); } }
Imports System Imports System.Globalization Module Program Sub Main(args As String()) Dim dt1str As String = "2019/12/10 10:20:30" Dim dt2str As String = "2019/12/10 10:20:90" Dim fmt As String = "yyyy/MM/dd hh:mm:ss" Dim dt As DateTime ' ParseExactのサンプル Try dt = DateTime.ParseExact(dt1str, fmt, Nothing) Console.WriteLine("dt1str:" & dt) Catch ex As Exception Console.WriteLine("Exception:" & ex.Message) End Try Try dt = DateTime.ParseExact(dt2str, fmt, Nothing) Console.WriteLine("dt2str:" & dt) Catch ex As Exception Console.WriteLine("Exception:" & ex.Message) End Try ' TryParseExactのサンプル Dim b As Boolean b = DateTime.TryParseExact(dt1str, fmt, Nothing, DateTimeStyles.AssumeLocal, dt) Console.WriteLine("dt1str:" & b) b = DateTime.TryParseExact(dt2str, fmt, Nothing, DateTimeStyles.AssumeLocal, dt) Console.WriteLine("dt2str:" & b) End Sub End Module
実行結果は以下のようになります。
dt2strの秒が90となっているため、DateTime.ParseExactでは例外が発生し、DateTime.TryParseExactではfalseが返却されます。
DateTime.TryParseExactメソッドでは、引数にDateTimeStyles.AssumeLocalを渡しています。
この説明については、以下のリンクを参照ください。
以上、文字列日時をDateTimeに変換するメソッドとサンプルコードの紹介でした。