文字列日時を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に変換するメソッドとサンプルコードの紹介でした。