#author("2020-01-05T15:44:27+09:00","","") #author("2020-05-09T12:05:03+09:00;2020-01-05T15:44:28+09:00","","") #navi(../) * 文字列日付をDateTimeに変換する [#t6855c5b] 文字列日時をDateTime型に変換するメソッド ''DateTime.ParseExact'' と ''DateTime.TryParseExact'' の使用例を紹介します。~ #htmlinsert(windev-top.html) #contents * 関連サイト [#b8ad5706] -[[Microsoft|.NET DateTime.ParseExact メソッド>https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tryparseexact?view=netframework-4.8]] -[[Microsoft|.NET DateTime.TryParseExact メソッド>https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tryparseexact?view=netframework-4.8]] -[[Microsoft|.NET DateTimeStyles 列挙型>https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.datetimestyles?view=netframework-4.8]] -[[Microsoft|.NET カスタム日時形式文字列>https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings?view=netframework-4.8]] #htmlinsert(windev-top.html) * 関連記事 [#f9c23961] -[[DateとDateTimeの違い>.NET/DateとDateTimeの違い]] * 日時文字列の変換フォーマット [#x28dfef1] 以下によく使うと思われる、年月日時分秒を指定する日時形式文字列について記します。~ 詳細な情報は、以下のリンクを参照ください。 -[[Microsoft|.NET カスタム日時形式文字列>https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings?view=netframework-4.8]] |BGCOLOR(NAVY):COLOR(WHITE):''日時形式文字列''|BGCOLOR(NAVY):COLOR(WHITE):''説明''| |yyyy|年の4桁| |MM|月の2桁| |dd|日の2桁| |hh|時間の2桁(24時間)| |mm|分の2桁| |ss|秒の2桁| * ''DateTime.ParseExact'' と ''DateTime.TryParseExact'' の違い [#c49a70ef] DateTime.ParseExactとDateTime.TryParseExactの違いは、変換失敗時に例外を発生するか、日時変換成功/失敗時にTrue/Falseを返却するかの違いになります。 |BGCOLOR(NAVY):COLOR(WHITE):''メソッド''|BGCOLOR(NAVY):COLOR(WHITE):''説明''| |DateTime.ParseExact|変換失敗時は例外が発生します。| |DateTime.TryParseExact|変換成功時は、True, 失敗時はFalseを返却します。&br;成功時には引数で渡したDateTimeに変換した値が格納されます。| * サンプルコード [#ab8cf070] C#とVisual Basic(VB)のサンプルコードを紹介します。 ** C#のサンプルコード [#l2bb9f9d] 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); } } ** Visual Basic(VB)のサンプルコード [#z6251459] 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 ** 実行結果 [#eedb8bcb] 実行結果は以下のようになります。~ dt2strの秒が90となっているため、DateTime.ParseExactでは例外が発生し、DateTime.TryParseExactではfalseが返却されます。~ #ref(01.png) ** その他 [#k8b514cc] DateTime.TryParseExactメソッドでは、引数に''DateTimeStyles.AssumeLocal''を渡しています。~ この説明については、以下のリンクを参照ください。 -[[Microsoft|.NET DateTimeStyles 列挙型>https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.datetimestyles?view=netframework-4.8]] 以上、文字列日時をDateTimeに変換するメソッドとサンプルコードの紹介でした。 #htmlinsert(windev-btm.html)