DateTime.ParseExact メソッド

定義

指定した文字列形式の日付と時刻を等価の DateTime の値に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

オーバーロード

ParseExact(String, String, IFormatProvider)

指定した書式とカルチャ固有の書式情報を使用して、指定した日付と時刻の文字列形式を等価の DateTime の値に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

指定した書式、カルチャ固有の書式情報、スタイルを使用して、指定した日付と時刻のスパン表現を、それと等価な DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles)

指定した書式の配列、カルチャ固有の書式情報、スタイルを使用して、指定した日付と時刻のスパン表現を、それと等価な DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。それ以外の場合は、例外がスローされます。

ParseExact(String, String, IFormatProvider, DateTimeStyles)

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

ParseExact(String, String[], IFormatProvider, DateTimeStyles)

指定した書式の配列、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。それ以外の場合は、例外がスローされます。

注釈

重要

和暦の時代 (年号) は天皇の代に基づいているため、変更されることが予想されます。 たとえば、JapaneseCalendarJapaneseLunisolarCalendar において、2019 年 5 月 1 日から令和時代が始まることになりました。 このような時代 (年号) の変更は、これらのカレンダーを使用するすべてのアプリケーションに影響します。 詳細およびアプリケーションが影響を受けるかどうかを判断する方法については、「 .net の日本語カレンダーでの新しい時代 (年号) の処理」を参照してください。 Windows システムでアプリケーションをテストして、時代 (年号) の変化に対応できるようにする方法については、「日本語時代 (年号) の変更に備えてアプリケーションを準備する」を参照してください。 複数の時代 (年号) を含む暦をサポートする .NET の機能について、および複数の時代 (年号) をサポートする予定表を操作する場合のベストプラクティスについては、「時代と作業

ParseExact(String, String, IFormatProvider)

指定した書式とカルチャ固有の書式情報を使用して、指定した日付と時刻の文字列形式を等価の DateTime の値に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。

public:
 static DateTime ParseExact(System::String ^ s, System::String ^ format, IFormatProvider ^ provider);
public static DateTime ParseExact (string s, string format, IFormatProvider provider);
public static DateTime ParseExact (string s, string format, IFormatProvider? provider);
static member ParseExact : string * string * IFormatProvider -> DateTime
Public Shared Function ParseExact (s As String, format As String, provider As IFormatProvider) As DateTime

パラメーター

s
String

変換する日時を含む文字列。

format
String

s の必要な形式を定義する形式指定子。 詳細については、「解説」を参照してください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。

戻り値

DateTime

format および provider で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

例外

s または formatnull です。

s または format が空の文字列です。

または s に、format で指定されているパターンに対応する日付と時刻が含まれていません。

または s の時間の部分と AM/PM 指定子が一致していません。

ParseExactメソッドの例を次に示します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string dateString, format;
      DateTime result;
      CultureInfo provider = CultureInfo.InvariantCulture;

      // Parse date-only value with invariant culture.
      dateString = "06/15/2008";
      format = "d";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date-only value without leading zero in month using "d" format.
      // Should throw a FormatException because standard short date pattern of
      // invariant culture requires two-digit month.
      dateString = "6/15/2008";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date and time with custom specifier.
      dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
      format = "ddd dd MMM yyyy h:mm tt zzz";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date and time with offset but without offset's minutes.
      // Should throw a FormatException because "zzz" specifier requires leading
      // zero in hours.
      dateString = "Sun 15 Jun 2008 8:30 AM -06";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      dateString = "15/06/2008 08:30";
      format = "g";
      provider = new CultureInfo("fr-FR");
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse a date that includes seconds and milliseconds
      // by using the French (France) and invariant cultures.
      dateString = "18/08/2015 06:30:15.006542";
      format = "dd/MM/yyyy HH:mm:ss.ffffff";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }
   }
}
// The example displays the following output:
//       06/15/2008 converts to 6/15/2008 12:00:00 AM.
//       6/15/2008 is not in the correct format.
//       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
//       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
//       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.
//       18/08/2015 06:30:15.006542 converts to 8/18/2015 6:30:15 AM.
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateString, format As String  
      Dim result As Date
      Dim provider As CultureInfo = CultureInfo.InvariantCulture

      ' Parse date-only value with invariant culture.
      dateString = "06/15/2008"
      format = "d"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 

      ' Parse date-only value without leading zero in month using "d" format.
      ' Should throw a FormatException because standard short date pattern of 
      ' invariant culture requires two-digit month.
      dateString = "6/15/2008"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse date and time with custom specifier.
      dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
      format = "ddd dd MMM yyyy h:mm tt zzz"        
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse date and time with offset but without offset's minutes.
      ' Should throw a FormatException because "zzz" specifier requires leading  
      ' zero in hours.
      dateString = "Sun 15 Jun 2008 8:30 AM -06"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse a date string using the French (France) culture.
      dateString = "15/06/2008 08:30"
      format = "g"
      provider = New CultureInfo("fr-FR")
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try

      ' Parse a date that includes seconds and milliseconds
      ' by using the French (France) and invariant cultures.
      dateString = "18/08/2015 06:30:15.006542"
      format = "dd/MM/yyyy HH:mm:ss.ffffff"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try
   End Sub
End Module
' The example displays the following output:
'       06/15/2008 converts to 6/15/2008 12:00:00 AM.
'       6/15/2008 is not in the correct format.
'       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
'       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
'       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.
'       18/08/2015 06:30:15.006542 converts to 8/18/2015 6:30:15 AM.

注釈

メソッドは、日付の文字列形式を解析します。これは、 パラメーターで定義された DateTime.ParseExact(String, String, IFormatProvider) 形式である必要 format があります。 また、日付と時刻の文字列表現の 要素と 要素が、 で指定された順序で表示され、 で許可されている以外の空白がない <Date> <Time> format s 必要があります format 。 が time 要素を持たない日付を定義し、解析操作が成功した場合、結果の値の時刻は午前 0 時 format DateTime (00:00:00) になります。 が format date 要素を持たない時刻を定義し、解析操作が成功した場合、結果の値の日付 DateTime は になります DateTime.Now.Date

が特定のタイム ゾーンの時刻を表していない場合、解析操作が成功すると、返される値 s Kind の プロパティは DateTime になります DateTimeKind.Unspecified 。 が特定のタイム ゾーン内の時刻を表し、タイム ゾーン情報が存在する (たとえば、 が "o"、"r"、または "u" 標準書式指定子と等しい場合、または s format format "z"、"zz"、または "zzz" カスタム Kind 書式 DateTime 指定子が含まれている場合) は、返される値の プロパティは です DateTimeKind.Local

パラメーターは、1 つの標準書式指定子、または の必須書式を定義する 1 つ以上のカスタム書式指定子を含む format 文字列です s 。 有効な書式指定コードの詳細については、「 標準の日時 書式指定文字列」または「カスタム日時書式指定文字列 」を参照してください

注意

が日付または時刻の区切り記号 format ("yyyyMMddHHmm" など) を含むカスタム書式パターンの場合は、 パラメーターにインバリアント カルチャを使用し、各カスタム書式指定子の最も広い形式を使用します。 provider たとえば、書式パターンで時間を指定する場合は、より狭い形式の "H" ではなく、より広い形式の "HH" を指定します。

で使用される特定の日付と時刻のシンボルと文字列 (特定の言語の日付の名前など) は、 が標準書式指定子文字列である場合の正確な形式と同様に、 パラメーターによって s provider s format 定義されます。 providerパラメーターには、次のいずれかを指定できます。

providernull 場合、 CultureInfo 現在のカルチャに対応する オブジェクトが使用されます。

注意 (呼び出し元)

.NET Framework 4 では、解析する文字列に 1 時間のコンポーネントと、アグリーメントされていない AM/PM 指定子が含まれている場合、メソッドは を ParseExact FormatException スローします。 3.5 .NET Framework以前のバージョンでは、AM/PM 指定子は無視されます。

こちらもご覧ください

適用対象

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

指定した書式、カルチャ固有の書式情報、スタイルを使用して、指定した日付と時刻のスパン表現を、それと等価な DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

public static DateTime ParseExact (ReadOnlySpan<char> s, ReadOnlySpan<char> format, IFormatProvider? provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
public static DateTime ParseExact (ReadOnlySpan<char> s, ReadOnlySpan<char> format, IFormatProvider provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
static member ParseExact : ReadOnlySpan<char> * ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As ReadOnlySpan(Of Char), format As ReadOnlySpan(Of Char), provider As IFormatProvider, Optional style As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

パラメーター

s
ReadOnlySpan<Char>

変換する日付と時刻を表す文字を含むスパン。

format
ReadOnlySpan<Char>

s の必要な書式を定義する書式指定子を表す文字を含んでいるスパン。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。

style
DateTimeStyles

ss に指定できるスタイル要素、または s から DateTime 値への変換に関する追加情報を提供する列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

formatprovider、および style で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

適用対象

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles)

指定した書式の配列、カルチャ固有の書式情報、スタイルを使用して、指定した日付と時刻のスパン表現を、それと等価な DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。それ以外の場合は、例外がスローされます。

public static DateTime ParseExact (ReadOnlySpan<char> s, string[] formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
public static DateTime ParseExact (ReadOnlySpan<char> s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
static member ParseExact : ReadOnlySpan<char> * string[] * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As ReadOnlySpan(Of Char), formats As String(), provider As IFormatProvider, Optional style As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

パラメーター

s
ReadOnlySpan<Char>

変換する日付と時刻を表す文字を含むスパン。

formats
String[]

s の許可された形式の配列。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。

style
DateTimeStyles

s で使用可能な書式を示す、列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

formatsprovider、および style で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

適用対象

ParseExact(String, String, IFormatProvider, DateTimeStyles)

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

public:
 static DateTime ParseExact(System::String ^ s, System::String ^ format, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style);
public static DateTime ParseExact (string s, string format, IFormatProvider provider, System.Globalization.DateTimeStyles style);
public static DateTime ParseExact (string s, string format, IFormatProvider? provider, System.Globalization.DateTimeStyles style);
static member ParseExact : string * string * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As String, format As String, provider As IFormatProvider, style As DateTimeStyles) As DateTime

パラメーター

s
String

変換する日付と時刻を格納した文字列。

format
String

s の必要な形式を定義する形式指定子。 詳細については、「解説」を参照してください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。

style
DateTimeStyles

ss に指定できるスタイル要素、または s から DateTime 値への変換に関する追加情報を提供する列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

formatprovider、および style で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

例外

s または formatnull です。

s または format が空の文字列です。

または s に、format で指定されているパターンに対応する日付と時刻が含まれていません。

または s の時間の部分と AM/PM 指定子が一致していません。

styleDateTimeStyles 値の正しくない組み合わせが含まれています。 たとえば、AssumeLocalAssumeUniversal の両方です。

ParseExact(String, String, IFormatProvider)メソッドの例を次に示します。 文字列 " 5/01/2009 8:30 AM" は、 で先頭のスペースが許可されないので、 パラメーターが と等しい場合、正常に解析できないことに styles DateTimeStyles.None 注意してください format 。 また、文字列 "5/01/2009 09:00" は format 、"MM/dd/yyyyhh:mm" ので正常に解析できません。日付文字列は、必要に応じて先頭に 0 の月番号が付かないのでです。 format

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo enUS = new CultureInfo("en-US");
      string dateString;
      DateTime dateValue;

      // Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM";
      try {
         dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Use custom formats with M and MM.
      dateString = "5/01/2009 09:00";
      try {
         dateValue = DateTime.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00";
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                                     DateTimeStyles.AdjustToUniversal);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z";
      try {
         dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                     DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      try {
         dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                     DateTimeStyles.RoundtripKind);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
   }
}
// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim enUS As New CultureInfo("en-US") 
      Dim dateString As String
      Dim dateValue As Date
      
      ' Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM"
      Try
         dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      
      ' Use custom formats with M and MM.
      dateString = "5/01/2009 09:00"
      Try
         dateValue = Date.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try

      ' Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00" 
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                                     DateTimeStyles.AdjustToUniversal)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
           
      ' Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z"
      Try
         dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      Try
         dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.RoundtripKind)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
   End Sub
End Module
' The example displays the following output:
'    ' 5/01/2009 8:30 AM' is not in an acceptable format.
'    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
'    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'    '5/01/2009 09:00' is not in an acceptable format.
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

注釈

メソッドは、日付の文字列形式を解析します。これは、 パラメーターで定義された DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) 形式である必要 format があります。 また、 の日付と時刻の要素が で s 指定された順序で表示される必要があります format 。 が パラメーターのパターンと一致しない場合、パラメーターで定義されたバリエーションを使用して、 s format style メソッドは をスローします FormatException 。 これに対し、 メソッドは、書式プロバイダーの オブジェクトによって認識される任意の形式で、日付の文字列形式 DateTime.Parse(String, IFormatProvider, DateTimeStyles) を解析 DateTimeFormatInfo します。 メソッド DateTime.Parse(String, IFormatProvider, DateTimeStyles) では、 の日付と時刻の要素を s 任意の順序で表示することもできます。

パラメーターに含まれる時刻と日付がない場合は、 パラメーターに フラグが含まれている場合を指定しない限り、現在の日付が使用されます。この場合、既定の日付 s style ( ) DateTimeStyles.NoCurrentDateDefault DateTime.Date.MinValue が使用されます。 パラメーターに日付と時刻がない場合は、午前 0 時 s (00:00:00) が使用されます。 パラメーターでは、先頭、内部、または末尾の空白文字をパラメーター style s に含めできるかどうかも決定します。

s タイム ゾーン情報が含まれている場合、返されるオブジェクト KindDateTime プロパティは です DateTimeKind.Unspecified 。 この動作は、 フラグを使用して変更できます。このフラグは、 プロパティが の値を返します。または、 フラグと フラグを使用して、プロパティが である値 DateTimeStyles.AssumeLocal DateTime Kind DateTimeKind.Local DateTimeStyles.AssumeUniversal DateTimeStyles.AdjustToUniversal DateTimeKind 返します DateTimeKind.Utc 。 にタイム ゾーン情報が含まれている場合、時刻は必要に応じて現地時刻に変換され、返されるオブジェクトの プロパティ s KindDateTime に設定されます DateTimeKind.Local 。 この動作を変更するには、 フラグを使用して、時刻 (UTC) 協定世界時をローカル時刻に変換しないか、 プロパティを DateTimeStyles.RoundtripKind Kind に設定します DateTimeKind.Utc

パラメーター format は、 パラメーターの必要なパターンを定義 s します。 カスタム日時書式指定文字列テーブルの 1 つ以上のカスタム書式指定子、または標準の日付と時刻書式指定文字列テーブルから定義済みのパターンを識別する 1 つの標準書式指定子で構成できます。

カスタム書式パターンで日付または時刻の区切り記号を使用しない場合は、 パラメーターにインバリアント カルチャを使用し、各カスタム書式指定子の最も広い形式 provider を使用します。 たとえば、パターンで時間を指定する場合は、狭い形式の "H" ではなく、より広い形式の "HH" を指定します。

注意

解析操作を成功するために 1 つの形式に準拠する必要があるのではなく、 メソッドを呼び出し、複数の許可された形式 s DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) を指定できます。 これにより、解析操作が成功する可能性が高くなっています。

パラメーターには、 によって定義されていない空白を表示できるかどうかと、解析操作の正確な動作を制御する場所を決定する 列挙体の 1 つ以上のメンバー styles DateTimeStyles format s が含まれています。 次の表では、 列挙型の各メンバーが メソッドの操作 DateTimeStyles に与える影響について説明 ParseExact(String, String, IFormatProvider, DateTimeStyles) します。

DateTimeStyles メンバー 説明
AdjustToUniversal 解析し s 、必要に応じて UTC に変換します。 にタイム ゾーン オフセットが含まれている場合、または タイム ゾーン情報が含まれているのに フラグが含まれている場合、メソッドは文字列を解析し、返された値を UTC に変換するために を呼び出し、 プロパティを に s s styles DateTimeStyles.AssumeLocal ToUniversalTime DateTime Kind 設定します DateTimeKind.Utc 。 が UTC を表す場合、またはタイム ゾーン情報が含まれているのに フラグが含まれている場合、メソッドは文字列を解析し、返された値にタイム ゾーン変換を実行しない場合は、 プロパティを に s s styles DateTimeStyles.AssumeUniversal DateTime Kind 設定します DateTimeKind.Utc 。 それ以外の場合、フラグは効果がありません。
AllowInnerWhite で定義されていない空白を、個々の日付要素または時刻要素の間 format に表示可能に指定します。
AllowLeadingWhite で定義されていない空白を の format 先頭に表示可能に指定します s
AllowTrailingWhite で定義されていない空白を の末尾に表示 format 可能に指定します s
AllowWhiteSpaces で定義されていない s 先頭、内側、末尾の空白を含めることができます format
AssumeLocal タイム ゾーン情報がない場合は、ローカル時刻を表 s すと見なされます。 フラグが存在 DateTimeStyles.AdjustToUniversal しない限り、返される値の Kind DateTime プロパティは に設定されます DateTimeKind.Local
AssumeUniversal タイム ゾーン情報がない場合は、UTC s を表すと見なされます。 フラグが存在しない限り、 メソッドは、返された値を UTC から現地時刻に変換し、その プロパティ DateTimeStyles.AdjustToUniversal DateTimeKind に設定します DateTimeKind.Local
NoCurrentDateDefault 日付 s 情報のない時刻が含まれている場合、戻り値の日付は に設定されます DateTime.MinValue.Date
None パラメーター s は既定値を使用して解析されます。 に存在する以外の空白 format は使用できます。 日付コンポーネントがない場合、返される値の日付は s DateTime 1/1/0001 に設定されます。 に s タイム ゾーン情報が含まれている場合、返されるオブジェクトの Kind DateTime プロパティは に設定されます DateTimeKind.Unspecified 。 タイム ゾーン情報が に存在する場合、時刻は現地時刻に変換され、返されるオブジェクトの s Kind DateTime プロパティは に設定されます DateTimeKind.Local
RoundtripKind タイム ゾーン情報を含む文字列の場合は、 プロパティが に設定された値 DateTime の日付と時刻への変換 Kind を回避します DateTimeKind.Local 。 このフラグは、主に UTC 時刻からローカル時刻への変換を防止します。

で使用される特定の日付と時刻のシンボルと文字列 (特定の言語の日の名前など) は、 が標準書式指定子文字列である場合の正確な形式と同様に、 パラメーターによって s provider s format 定義されます。 providerパラメーターには、次のいずれかを指定できます。

providernull 場合、 CultureInfo 現在のカルチャに対応する オブジェクトが使用されます。

注意 (呼び出し元)

.NET Framework 4 では、解析する文字列に 1 時間のコンポーネントと、アグリーメントされていない AM/PM 指定子が含まれている場合、 メソッドは を ParseExact FormatException スローします。 3.5 .NET Framework以前のバージョンでは、AM/PM 指定子は無視されます。

こちらもご覧ください

適用対象

ParseExact(String, String[], IFormatProvider, DateTimeStyles)

指定した書式の配列、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。それ以外の場合は、例外がスローされます。

public:
 static DateTime ParseExact(System::String ^ s, cli::array <System::String ^> ^ formats, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style);
public static DateTime ParseExact (string s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style);
public static DateTime ParseExact (string s, string[] formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style);
static member ParseExact : string * string[] * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As String, formats As String(), provider As IFormatProvider, style As DateTimeStyles) As DateTime

パラメーター

s
String

変換する日時を含む文字列。

formats
String[]

s の許可された形式の配列。 詳細については、「解説」を参照してください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。

style
DateTimeStyles

s で使用可能な書式を示す、列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

formatsprovider、および style で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

例外

s または formatsnull です。

s が空の文字列です。

または formats の要素は空の文字列です。

または s には、 formatsのどの要素に対応する日時も含まれていません。

または s の時間の部分と AM/PM 指定子が一致していません。

styleDateTimeStyles 値の正しくない組み合わせが含まれています。 たとえば、AssumeLocalAssumeUniversal の両方です。

次の例では、 メソッドを使用して、さまざまな形式の文字列を正常 DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) に解析できます。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
                         "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
                         "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
                         "M/d/yyyy h:mm", "M/d/yyyy h:mm",
                         "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
                         "MM/d/yyyy HH:mm:ss.ffffff" };
      string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM",
                              "5/1/2009 6:32:00", "05/01/2009 06:32",
                              "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
                              "08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" };
      DateTime dateValue;

      foreach (string dateString in dateStrings)
      {
         try {
            dateValue = DateTime.ParseExact(dateString, formats,
                                            new CultureInfo("en-US"),
                                            DateTimeStyles.None);
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
//       Unable to convert '08/28/2015 16:17:39.125' to a date.
//       Converted '08/28/2015 16:17:39.125000' to 8/28/2015 4:17:39 PM.
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim formats() As String = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", _
                                 "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", _
                                 "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", _
                                 "M/d/yyyy h:mm", "M/d/yyyy h:mm", _
                                 "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
                                 "MM/d/yyyy HH:mm:ss.ffffff" }
      Dim dateStrings() As String = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", _
                                     "5/1/2009 6:32:00", "05/01/2009 06:32", _
                                     "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
                                     "08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" }

      Dim dateValue As DateTime
      
      For Each dateString As String In dateStrings
         Try
            dateValue = DateTime.ParseExact(dateString, formats, _
                                            New CultureInfo("en-US"), _
                                            DateTimeStyles.None)
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
         Catch e As FormatException
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
         End Try                                               
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
'       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
'       Unable to convert '08/28/2015 16:17:39.125' to a date.
'       Converted '08/28/2015 16:17:39.125000' to 8/28/2015 4:17:39 PM.

注釈

メソッドは、 パラメーターに割り当てられたパターンに一致する日付の文字列 DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) 形式を解析 formats します。 文字列がパラメーターで定義されているバリエーションとこれらのパターンの 1 つも一致しない場合、メソッドは s styles をスローします FormatException 。 1 つの書式設定パターンではなく、複数の書式設定パターンと比較する以外に、このオーバーロードは メソッドと同 s じように動作 DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) します。

パラメーター s には、解析する日時が含まれている。 パラメーターに含まれる時刻と日付がない場合は、 パラメーターに フラグが含まれている場合を指定しない限り、現在の日付が使用されます。この場合、既定の日付 s style ( ) DateTimeStyles.NoCurrentDateDefault DateTime.Date.MinValue が使用されます。 パラメーターに日付と時刻がない場合は、午前 0 時 s (00:00:00) が使用されます。 パラメーターでは、 パラメーターに、 の書式指定文字列の 1 つで許可されている空白文字以外の先頭、内部、または末尾の空白文字を含めることもできます style s formats

s タイム ゾーン情報が含まれている場合、返されるオブジェクト KindDateTime プロパティは です DateTimeKind.Unspecified 。 この動作は、 フラグを使用して変更できます。このフラグは、 プロパティが の値を返します。または、 フラグと フラグを使用して、プロパティが である値 DateTimeStyles.AssumeLocal DateTime Kind DateTimeKind.Local DateTimeStyles.AssumeUniversal DateTimeStyles.AdjustToUniversal DateTimeKind 返します DateTimeKind.Utc 。 にタイム ゾーン情報が含まれている場合、時刻は必要に応じて現地時刻に変換され、返されるオブジェクトの プロパティ s KindDateTime に設定されます DateTimeKind.Local 。 この動作を変更するには、 フラグを使用して、時刻 (UTC) 協定世界時を現地時刻に変換し、プロパティを DateTimeStyles.RoundtripKind Kind に設定します DateTimeKind.Utc

パラメーターにはパターンの配列が含まれているので、解析操作が成功する場合は、そのうちの 1 つが正確 formats s に一致する必要があります。 パラメーターのパターンは、カスタム日時書式指定文字列テーブルの 1 つ以上のカスタム書式指定子、または標準の日時書式指定文字列テーブルから定義済みのパターンを識別する 1 つの標準書式指定子で構成 formats されます

カスタム書式パターンで日付または時刻の区切り記号を使用しない場合は、 パラメーターにインバリアント カルチャを使用し、各カスタム書式指定子の最も広い形式 provider を使用します。 たとえば、パターンで時間を指定する場合は、狭い形式の "H" ではなく、より広い形式の "HH" を指定します。

パラメーターには、 によって定義されていない空白を表示できるかどうかと、解析操作の正確な動作を制御する場所を決定する 列挙体の 1 つ以上のメンバー styles DateTimeStyles format s が含まれています。 次の表では、 列挙型の各メンバーが メソッドの操作 DateTimeStyles に与える影響について説明 ParseExact(String, String, IFormatProvider, DateTimeStyles) します。

DateTimeStyles メンバー 説明
AdjustToUniversal 解析し s 、必要に応じて UTC に変換します。 にタイム ゾーン オフセットが含まれている場合、または タイム ゾーン情報が含まれているのに フラグが含まれている場合、メソッドは文字列を解析し、返された値を UTC に変換するために を呼び出し、 プロパティを に s s styles DateTimeStyles.AssumeLocal ToUniversalTime DateTime Kind 設定します DateTimeKind.Utc 。 が UTC を表す場合、またはタイム ゾーン情報が含まれているのに フラグが含まれている場合、メソッドは文字列を解析し、返された値にタイム ゾーン変換を実行しない場合は、 プロパティを に s s styles DateTimeStyles.AssumeUniversal DateTime Kind 設定します DateTimeKind.Utc 。 それ以外の場合、フラグは効果がありません。
AllowInnerWhite で定義されていない空白を、個々の日付要素または時刻要素の間 format に表示可能に指定します。
AllowLeadingWhite で定義されていない空白を の format 先頭に表示可能に指定します s
AllowTrailingWhite で定義されていない空白を の末尾に表示 format 可能に指定します s
AllowWhiteSpaces で定義されていない s 先頭、内側、末尾の空白を含めることができます format
AssumeLocal タイム ゾーン情報がない場合は、ローカル時刻を表 s すと見なされます。 フラグが存在 DateTimeStyles.AdjustToUniversal しない限り、返される値の Kind DateTime プロパティは に設定されます DateTimeKind.Local
AssumeUniversal タイム ゾーン情報がない場合は、UTC s を表すと見なされます。 フラグが存在しない限り、 メソッドは、返された値を UTC から現地時刻に変換し、その プロパティ DateTimeStyles.AdjustToUniversal DateTimeKind に設定します DateTimeKind.Local
NoCurrentDateDefault 日付 s 情報のない時刻が含まれている場合、戻り値の日付は に設定されます DateTime.MinValue.Date
None パラメーター s は既定値を使用して解析されます。 に存在する以外の空白 format は使用できます。 日付コンポーネントがない場合、返される値の日付は s DateTime 1/1/0001 に設定されます。 に s タイム ゾーン情報が含まれている場合、返されるオブジェクトの Kind DateTime プロパティは に設定されます DateTimeKind.Unspecified 。 タイム ゾーン情報が に存在する場合、時刻は現地時刻に変換され、返されるオブジェクトの s Kind DateTime プロパティは に設定されます DateTimeKind.Local
RoundtripKind タイム ゾーン情報を含む文字列の場合は、 プロパティが に設定された日付と時刻への変換 Kind を回避します DateTimeKind.Local 。 このフラグは、主に UTC 時刻からローカル時刻への変換を防止します。

で使用される特定の日付と時刻のシンボルと文字列 (特定の言語の日の名前など) は、 が標準書式指定子文字列である場合の正確な形式と同様に、 パラメーターによって s provider s format 定義されます。 providerパラメーターには、次のいずれかを指定できます。

providernull 場合、 CultureInfo 現在のカルチャに対応する オブジェクトが使用されます。

注意 (呼び出し元)

.NET Framework 4 では、解析する文字列に 1 時間のコンポーネントと、アグリーメントされていない AM/PM 指定子が含まれている場合、 メソッドは を ParseExact FormatException スローします。 3.5 .NET Framework以前のバージョンでは、AM/PM 指定子は無視されます。

こちらもご覧ください

適用対象