【C#】DateTime.ParseExact VS DateTime.TryParseExact(違いと使い分け)

DateTimeクラスとは

DateTimeクラスは、日時(日付)を扱うときに使用するクラスです。

現在の日時を取得したり、フォーマットを指定して日時の文字列に変換して表示することなどができます。

 

DateTime.ParseExact メソッドとは

DateTime.ParseExact メソッドは、日時の文字列の書式(フォーマット)を指定してDateTime型に変換することができます

詳しくは、以下の記事を参考ください。

【C#】DateTime.ParseExact メソッドとは

2021.06.11

 

DateTime.TryParseExact メソッドとは

DateTime.TryParseExact メソッドは、指定した文字列形式の日付と時刻を等価のDateTimeの値に変換します

文字列が正常に変換された場合は「true」を返し、変換されなかった場合には「false」を返します。

詳しくは、以下の記事を参考ください。

【C#】DateTime.TryParseExact メソッドとは

2021.06.12

 

ParseExactとTryParseExactの違い

ParseExactメソッドとTryParseExactメソッドの違いは以下になります。

メソッド名 説明
ParseExactメソッド ・日時の文字列をフォーマットを指定してDateTime型に変換

変換ができなかった場合に、例外(System.FormatException)が発生する

TryParseExactメソッド ・日時の文字列をフォーマットを指定してDateTime型に変換

・変換できた場合は「true」を返す。
変換できなかった場合は「false」を返す(例外が発生しない)。

 

ParseExactとTryParseExactの使い分け

ParseExactとTryParseExactの使い分けとして、DateTime型に変換したい文字列が確実に指定したフォーマットになる場合には、ParseExactメソッドを使用しても大丈夫だと思います

しかし、DateTime型に変換したい文字列が指定したフォーマットに確実に当てはまるかわからない場合には、TryParseExactメソッドを使用することが望ましいと思います

 

ParseExactのサンプルコード

using System;

namespace c_parseexact
{
    class Program
    {
        static void Main(string[] args)
        {
            string receptionTime = "2021/6/11 12:34:56"; // 本来なら2021/06/11 12:34:56になる所

            string format = "yyyy/MM/dd HH:mm:ss";

            DateTime dateTime = DateTime.ParseExact(receptionTime, format, null);

            Console.WriteLine(dateTime);
        }
    }
}

実行結果:

System.FormatExceptionがスローされました

上記のようにParseExactメソッドでは、変換したい文字列が指定したフォーマットと異なる場合、例外が発生してしまいます。

 

TryParseExactのサンプルコード

using System;
using System.Globalization;

namespace c_tryparseexact
{
    class Program
    {
        static void Main(string[] args)
        {
            string receptionTime = "2021/6/12 12:34:56"; // 本来なら2021/06/12 12:34:56になる所

            string format = "yyyy/MM/dd HH:mm:ss";

            DateTimeStyles dateTimeStyles = DateTimeStyles.None;

            if (DateTime.TryParseExact(receptionTime, format, null, dateTimeStyles, out DateTime dateTime))
            {
                Console.WriteLine("変換に成功しました。");
                Console.WriteLine(dateTime);
            }
            else
            {
                Console.WriteLine("変換できませんでした。");
            }
           
        }
    }
}

実行結果:

変換できませんでした。

上記のようにTryParseExactメソッドでは、変換したい文字列が指定したフォーマットと異なる場合、「false」が返るため例外は発生しません。

 

おすすめ書籍・Udemy

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0

 

■Udemyのおすすめ講座①
C#初心者が最初に身に着けるべき30の文法

■Udemyのおすすめ講座②
初心者でも最速でシゴトに使えるC#!