DateTimeOffset.TryParseExact メソッド

定義

指定した文字列形式の日付と時刻を等価の DateTimeOffset の値に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。

オーバーロード

TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTimeOffset)

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

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTimeOffset)

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、文字範囲に含まれる日付と時刻の表現を等価の DateTimeOffset に変換します。 日付と時刻を表すための書式は、指定した書式と完全に一致する必要があります。

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

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、文字スパンによる日付と時刻の表現を等価の DateTimeOffset に変換します。 日付と時刻を表すための書式は、指定した書式のいずれかと完全に一致する必要があります。

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset)

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

TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTimeOffset)

Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs

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

public:
 static bool TryParseExact(System::String ^ input, cli::array <System::String ^> ^ formats, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTimeOffset % result);
public static bool TryParseExact (string input, string[] formats, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
public static bool TryParseExact (string? input, string?[]? formats, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
static member TryParseExact : string * string[] * IFormatProvider * System.Globalization.DateTimeStyles * DateTimeOffset -> bool
Public Shared Function TryParseExact (input As String, formats As String(), formatProvider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTimeOffset) As Boolean

パラメーター

input
String

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

formats
String[]

input の有効な書式を定義する配列。

formatProvider
IFormatProvider

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

styles
DateTimeStyles

input に許可されている書式を示す列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

result
DateTimeOffset

メソッドから制御が戻るときに、 の日付と時刻inputに相当する が格納DateTimeOffsetされます (変換が成功した場合は )。変換に失敗した場合は DateTimeOffset.MinValue が格納されます。 input が正しい文字列形式の日時を含んでいない場合、format で定義された書式に従う日時が含まれていない場合、または、formatsnull の場合、変換に失敗します。 このパラメーターは初期化せずに渡されます。

戻り値

input パラメーターが正常に変換された場合は true。それ以外の場合は false

例外

styles に未定義の DateTimeStyles 値が含まれています。

- または -

NoCurrentDateDefault がサポートされていません。

- または -

styles に相互に排他的な DateTimeStyles 値が含まれています。

次の例では、日付と時刻とオフセット値の文字列形式に対して複数の入力形式を定義し、ユーザーが入力した文字列を メソッドに TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTimeOffset) 渡します。

TextReader conIn = Console.In;
TextWriter conOut = Console.Out;
int tries = 0;
string input = String.Empty;

string[] formats = new string[] {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz",
                                 "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz",
                                 "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz",
                                 "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz",
                                 "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz",
                                 "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz",
                                 "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz",
                                 "M/d/yy H:m zzz", "MM/d/yy H:m zzz",
                                 "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz",
                                 "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz",
                                 "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz",
                                 "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz",
                                 "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz",
                                 "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz",
                                 "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz",
                                 "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"};
IFormatProvider provider = CultureInfo.InvariantCulture.DateTimeFormat;
DateTimeOffset result;

do {
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),");
   conOut.Write("Then press Enter: ");
   input = conIn.ReadLine();
   conOut.WriteLine();
   if (DateTimeOffset.TryParseExact(input, formats, provider,
                                   DateTimeStyles.AllowWhiteSpaces,
                                   out result))
   {
      break;
   }
   else
   {
      Console.WriteLine("Unable to parse {0}.", input);
      tries++;
   }
} while (tries < 3);
if (tries >= 3)
   Console.WriteLine("Exiting application without parsing {0}", input);
else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString());
// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00
let mutable result = None    
let mutable tries = 0
let mutable input = ""

let formats = 
    [| "M/dd/yyyy HH:m zzz"; "MM/dd/yyyy HH:m zzz"
       "M/d/yyyy HH:m zzz"; "MM/d/yyyy HH:m zzz"
       "M/dd/yy HH:m zzz"; "MM/dd/yy HH:m zzz"
       "M/d/yy HH:m zzz"; "MM/d/yy HH:m zzz"
       "M/dd/yyyy H:m zzz"; "MM/dd/yyyy H:m zzz"
       "M/d/yyyy H:m zzz"; "MM/d/yyyy H:m zzz"
       "M/dd/yy H:m zzz"; "MM/dd/yy H:m zzz"
       "M/d/yy H:m zzz"; "MM/d/yy H:m zzz"
       "M/dd/yyyy HH:mm zzz"; "MM/dd/yyyy HH:mm zzz"
       "M/d/yyyy HH:mm zzz"; "MM/d/yyyy HH:mm zzz"
       "M/dd/yy HH:mm zzz"; "MM/dd/yy HH:mm zzz"
       "M/d/yy HH:mm zzz"; "MM/d/yy HH:mm zzz"
       "M/dd/yyyy H:mm zzz"; "MM/dd/yyyy H:mm zzz"
       "M/d/yyyy H:mm zzz"; "MM/d/yyyy H:mm zzz"
       "M/dd/yy H:mm zzz"; "MM/dd/yy H:mm zzz"
       "M/d/yy H:mm zzz"; "MM/d/yy H:mm zzz" |]
let provider = CultureInfo.InvariantCulture.DateTimeFormat

while tries < 3 && result.IsNone do
    printfn "Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),"
    printf "Then press Enter: "
    input <- stdin.ReadLine()
    printfn ""
    match DateTimeOffset.TryParseExact(input, formats, provider, DateTimeStyles.AllowWhiteSpaces) with
    | true, dto ->
        result <- Some dto
    | _ ->
        printfn $"Unable to parse {input}."
    tries <- tries + 1

match result with
| Some result ->
    printfn $"{input} was converted to {result}"
| None ->
    printfn $"Exiting application without parsing {input}"

// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00
 Dim conIn As TextReader = Console.In
 Dim conOut As TextWriter = Console.Out
 Dim tries As Integer = 0
 Dim input As String = String.Empty
 Dim formats() As String = {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz", _
                            "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz", _
                            "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz", _
                            "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz", _                                 
                            "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz", _
                            "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz", _
                            "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz", _
                            "M/d/yy H:m zzz", "MM/d/yy H:m zzz", _                               
                            "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz", _
                            "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz", _
                            "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz", _
                            "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz", _                                 
                            "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz", _
                            "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz", _
                            "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz", _
                            "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"}   
 Dim provider As IFormatProvider = CultureInfo.InvariantCulture.DateTimeFormat
 Dim result As DateTimeOffset

 Do 
    conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),")
    conOut.Write("Then press Enter: ")
    input = conIn.ReadLine()
    conOut.WriteLine() 
    If DateTimeOffset.TryParseExact(input, formats, provider, _
                                    DateTimeStyles.AllowWhiteSpaces, _
                                    result) Then
       Exit Do
    Else
       Console.WriteLine("Unable to parse {0}.", input)      
       tries += 1
    End If
 Loop While tries < 3
 If tries >= 3 Then
    Console.WriteLine("Exiting application without parsing {0}", input)
 Else
    Console.WriteLine("{0} was converted to {1}", input, result.ToString())                                                     
 End If 
 ' Some successful sample interactions with the user might appear as follows:
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/08/2007 6:54 -6:00
 '    
 '    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00         
 '    
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/8/2007 06:54 -06:00
 '    
 '    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
 '    
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/5/07 6:54 -6:00
 '    
 '    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

注釈

メソッドは TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTimeOffset) 、配列に割り当てられているパターンのいずれかに一致する日付の文字列表現を formats 解析します。 文字列が input パラメーターによって定義された styles バリエーションとこれらのパターンのいずれとも一致しない場合、解析操作は失敗し、 メソッドは を返します false。 書式指定子を含む複数の文字列と比較する input 以外に、このオーバーロードは メソッドと同じように DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles) 動作します。

パラメーターは formats 、1 つの標準書式指定子または の可能なパターンを定義する 1 つ以上の inputカスタム書式指定子を要素に含む文字列配列です。 有効な書式設定コードの詳細については、「 標準の日付と時刻の書式指定文字列 」および「 カスタムの日付と時刻の書式指定文字列」を参照してください。 に一致する要素にformats、 にオフセットが存在する必要があることを示す 、zz、またはzzzカスタム書式指定子が含まれているz場合、inputオフセットには負符号または正符号のいずれかを含める必要があります。 符号が見つからない場合、解析操作は失敗し、 メソッドは を返します false

重要

このオーバーロードの パラメーターを formats 使用して複数の形式を指定すると、多くのユーザーが日付と時刻を入力するときのフラストレーションを軽減できます。 特に、複数の入力パターンを定義する機能を使用すると、アプリケーションは、月、日、時間、分、秒の先頭のゼロを含めたり欠けたりする可能性がある日付と時刻の表現を処理できます。 この例では、この図を示します。

の一致する要素に formats 日付が含まれているが input 時刻が含まれていない場合、結果の DateTimeOffset オブジェクトには午前 0 時 (0:00:00) の時刻が割り当てられます。 の一致する要素で formats 、入力に日付ではなく時刻が含まれている必要がある場合、結果の DateTimeOffset オブジェクトにはローカル システムの現在の日付が割り当てられます。 で一致する要素に formats オフセットを含む必要 input がない場合、結果 DateTimeOffset のオブジェクトのオフセットはパラメーターの styles 値によって異なります。 に が含まれているAssumeLocal場合styles、ローカル タイム ゾーンのオフセットが オブジェクトにDateTimeOffset割り当てられます。 に が含まれているAssumeUniversal場合styles、協定世界時 (UTC) オフセットまたは +00:00 がオブジェクトにDateTimeOffset割り当てられます。 どちらの値も指定しない場合は、ローカル タイム ゾーンのオフセットが使用されます。

で使用される特定の日付と時刻の input シンボルと文字列は、 formatProvider パラメーターによって定義されます。 の一致する要素formatsが標準書式指定子文字列の場合、 の正確なパターンinputについても同じことが当てはまります。 パラメーターには formatProvider 、次のいずれかを指定できます。

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

パラメーターは styles 、入力文字列で空白を許可するかどうかを定義し、明示的なオフセット コンポーネントのない文字列の解析方法を示し、解析操作の一環として UTC 変換をサポートします。 列挙体のすべてのメンバーは DateTimeStyles 、 を除いて NoCurrentDateDefaultサポートされています。 次の表に、サポートされている各メンバーの効果を示します。

DateTimeStyles のメンバー 動作
AdjustToUniversal inputを解析し、必要に応じて UTC に変換します。 これは、文字列を解析してから、返されたDateTimeOffsetオブジェクトの メソッドをDateTimeOffset.ToUniversalTime呼び出すことと同じです。
AssumeLocal で一致する要素に formats オフセット値を含む必要 input がない場合、返されるオブジェクトにはローカル タイム ゾーンのオフセットが指定されます DateTimeOffset 。 これが既定値です。
AssumeUniversal で一致する要素に formats オフセット値を含む必要 input がない場合、返される DateTimeOffset オブジェクトには UTC オフセット (+00:00) が与えられます。
AllowInnerWhite 内の 要素formatsで指定されていない内部空白を含めることができますinput。 日付と時刻のコンポーネントと個々のコンポーネント (オフセットを除く) の間に余分な空白が表示され、文字列を解析するときに無視されます。
AllowLeadingWhite 内の 要素formatsで指定されていない先頭のスペースを含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowTrailingWhite 内の 要素formatsで指定されていない末尾のスペースを含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowWhiteSpaces の 要素formatsで指定されていない先頭、末尾、および内部スペースを含めることができますinput。 文字列の解析時に、 の一致する要素 formats で指定されていない余分な空白文字はすべて無視されます。
None で追加の空白が許可されていないことを input示します。 一致が正常に行われるには、 の特定の要素で formats 指定されているとおりに空白を指定する必要があります。 これは既定の動作です。
RoundtripKind 構造体に プロパティが DateTimeOffset 含まれていないため、 Kind 効果はありません。

注意 (呼び出し元)

.NET Framework 4 では、TryParseExact解析する文字列に時間コンポーネントと、一致していない AM/PM 指定子が含まれている場合、 は を返falseします。 .NET Framework 3.5 以前のバージョンでは、AM/PM 指定子は無視されます。

適用対象

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTimeOffset)

Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、文字範囲に含まれる日付と時刻の表現を等価の DateTimeOffset に変換します。 日付と時刻を表すための書式は、指定した書式と完全に一致する必要があります。

public:
 static bool TryParseExact(ReadOnlySpan<char> input, ReadOnlySpan<char> format, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTimeOffset % result);
public static bool TryParseExact (ReadOnlySpan<char> input, ReadOnlySpan<char> format, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
public static bool TryParseExact (ReadOnlySpan<char> input, ReadOnlySpan<char> format, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
static member TryParseExact : ReadOnlySpan<char> * ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles * DateTimeOffset -> bool
Public Shared Function TryParseExact (input As ReadOnlySpan(Of Char), format As ReadOnlySpan(Of Char), formatProvider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTimeOffset) As Boolean

パラメーター

input
ReadOnlySpan<Char>

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

format
ReadOnlySpan<Char>

input の必要な形式を定義する形式指定子。

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

メソッドから制御が戻るときに、 の日付と時刻inputに相当する が格納されます。変換が成功した場合は 、変換に失敗した場合は DateTimeOffset.MinValue が格納DateTimeOffsetされます。 次の場合、変換は失敗します

戻り値

input パラメーターが正常に変換された場合は true。それ以外の場合は false

例外

styles に未定義の DateTimeStyles 値が含まれています。 または、NoCurrentDateDefault がサポートされていません。 または、styles に相互に排他的な DateTimeStyles 値が含まれています。

注釈

このオーバーロードは メソッドに DateTimeOffset.ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles) 似ていますが、変換が失敗してもこのメソッドは例外をスローしません。 パラメーターで指定されたパターンと完全に一致する必要がある日付と時刻の表現を format 解析します。 このパターンと一致しない場合 input は、 パラメーターによって定義された styles 空白文字のバリエーションが考えられますが、解析操作は失敗し、 メソッドは を返します false

パラメーターは format 、1 つの標準書式指定子または の必要なパターンを定義する 1 つ以上の inputカスタム書式指定子を含む文字スパンです。 有効な書式設定コードの詳細については、「 標準の日付と時刻の書式指定文字列 」および「 カスタムの日付と時刻の書式指定文字列」を参照してください。 にオフセットがz存在する必要があることを示す 、zz、またはzzzカスタム書式指定子が含まれている場合formatinputそのオフセットには負符号または正符号を含める必要があります。 符号が見つからない場合、解析操作は失敗し、 メソッドは を返します false

日付を含むがinput時刻を含まない必要がある場合format、結果のDateTimeOffsetオブジェクトには午前 0 時 (0:00:00) の時刻が割り当てられます。 日付ではなく時刻を含むinput必要がある場合format、結果DateTimeOffsetのオブジェクトにはローカル システムの現在の日付が割り当てられます。 オフセットを含む必要inputがない場合format、結果DateTimeOffsetのオブジェクトのオフセットは パラメーターのstyles値によって異なります。 に が含まれているAssumeLocal場合styles、ローカル タイム ゾーンのオフセットが オブジェクトにDateTimeOffset割り当てられます。 に が含まれているAssumeUniversal場合styles、協定世界時 (UTC) オフセットまたは +00:00 がオブジェクトにDateTimeOffset割り当てられます。 どちらの値も指定しない場合は、ローカル タイム ゾーンのオフセットが使用されます。

で使用される特定の日付と時刻の input シンボルと文字列は、 formatProvider パラメーターによって定義されます。 が標準書式指定子文字列の場合formatinput正確なパターンについても同じことが当てはまります。 パラメーターには formatProvider 、次のいずれかを指定できます。

  • CultureInfo解釈される に基づいてinputカルチャを表す オブジェクト。 プロパティによってCultureInfo.DateTimeFormat返される オブジェクトはDateTimeFormatInfo、 で許可されるシンボルと標準形式をinput定義します。

  • DateTimeFormatInfo日付と時刻のデータの形式を定義する オブジェクト。

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

パラメーターは styles 、入力文字列で空白を使用できるかどうかを定義し、明示的なオフセット コンポーネントのない文字列の解析方法を示し、解析操作の一環として UTC 変換をサポートします。 列挙体のすべてのメンバーは DateTimeStyles 、 を除いて NoCurrentDateDefaultサポートされています。 次の表に、サポートされている各メンバーの効果を示します。

DateTimeStyles のメンバー 動作
AdjustToUniversal inputを解析し、必要に応じて UTC に変換します。 これは、日付と時刻の表現を解析し、返されたDateTimeOffsetオブジェクトの メソッドをDateTimeOffset.ToUniversalTime呼び出すことと同じです。
AssumeLocal オフセット値を含む がinput不要な場合format、返されるオブジェクトにはローカル タイム ゾーンのオフセットが指定されますDateTimeOffset。 これは既定の動作です。
AssumeUniversal オフセット値を含む必要inputがない場合format、返されるDateTimeOffsetオブジェクトには UTC オフセット (+00:00) が与えられます。
AllowInnerWhite 書式で指定されていない内部空白を含めることができます input 。 日付と時刻のコンポーネントの間と、オフセット以外の個々のコンポーネント内に余分な空白が表示される可能性があり、文字列を解析するときに無視されます。
AllowLeadingWhite で指定されていない先頭のスペースをformat含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowTrailingWhite で指定されていない末尾のスペースをformat含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowWhiteSpaces で指定されていない先頭、末尾、および内部スペースをformat含めることができますinput。 で指定 format されていない余分な空白文字はすべて、文字列の解析時に無視されます。
None で追加の空白が許可されていないことを input示します。 空白は、 で format指定したとおりに表示する必要があります。 これは既定の動作です。
RoundtripKind 構造体に プロパティが DateTimeOffsetKind まれていないため、効果はありません。

適用対象

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

Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、文字スパンによる日付と時刻の表現を等価の DateTimeOffset に変換します。 日付と時刻を表すための書式は、指定した書式のいずれかと完全に一致する必要があります。

public:
 static bool TryParseExact(ReadOnlySpan<char> input, cli::array <System::String ^> ^ formats, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTimeOffset % result);
public static bool TryParseExact (ReadOnlySpan<char> input, string?[]? formats, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
public static bool TryParseExact (ReadOnlySpan<char> input, string[] formats, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
static member TryParseExact : ReadOnlySpan<char> * string[] * IFormatProvider * System.Globalization.DateTimeStyles * DateTimeOffset -> bool
Public Shared Function TryParseExact (input As ReadOnlySpan(Of Char), formats As String(), formatProvider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTimeOffset) As Boolean

パラメーター

input
ReadOnlySpan<Char>

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

formats
String[]

input に許容される書式を定義する標準またはカスタムの書式指定文字列の配列。

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

メソッドから制御が戻るときに、 の日付と時刻inputに相当する が格納されます。変換が成功した場合は 、変換に失敗した場合は DateTimeOffset.MinValue が格納DateTimeOffsetされます。 次の場合、変換は失敗します

戻り値

input パラメーターが正常に変換された場合は true。それ以外の場合は false

例外

styles に未定義の DateTimeStyles 値が含まれています。 または、NoCurrentDateDefault がサポートされていません。 または、styles に相互に排他的な DateTimeStyles 値が含まれています。

注釈

このメソッドは、配列に割り当てられているパターンのいずれかに一致する日付の文字列表現を formats 解析します。 これらのパターンのいずれかが パラメーターで定義されたstylesバリエーションと一致しない場合input、解析操作は失敗し、 メソッドは を返しますfalse。 書式指定子を含む複数の文字列と比較する input 以外に、このオーバーロードは メソッドと同じように DateTimeOffset.ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles) 動作します。

パラメーターは formats 、1 つの標準書式指定子または の可能なパターンを定義する 1 つ以上の inputカスタム書式指定子を要素に含む文字列配列です。 有効な書式設定コードの詳細については、「 標準の日付と時刻の書式指定文字列 」および「 カスタムの日付と時刻の書式指定文字列」を参照してください。 に一致する要素にformats、 にオフセットが存在する必要があることを示す 、zz、またはzzzカスタム書式指定子が含まれているz場合、inputオフセットには負符号または正符号のいずれかを含める必要があります。 符号が見つからない場合、解析操作は失敗し、 メソッドは を返します false

重要

このオーバーロードの パラメーターを formats 使用して複数の形式を指定すると、多くのユーザーが日付と時刻を入力するときのフラストレーションを軽減できます。 特に、複数の入力パターンを定義する機能を使用すると、アプリケーションは、月、日、時間、分、秒の先頭のゼロを含めたり欠けたりする可能性がある日付と時刻の表現を処理できます。 この例では、この図を示します。

の一致する要素に formats 日付が含まれているが input 時刻が含まれていない場合、結果の DateTimeOffset オブジェクトには午前 0 時 (0:00:00) の時刻が割り当てられます。 の一致する要素で formats 、入力に日付ではなく時刻が含まれている必要がある場合、結果の DateTimeOffset オブジェクトにはローカル システムの現在の日付が割り当てられます。 で一致する要素に formats オフセットを含む必要 input がない場合、結果 DateTimeOffset のオブジェクトのオフセットはパラメーターの styles 値によって異なります。 に が含まれているDateTimeStyles.AssumeLocal場合styles、ローカル タイム ゾーンのオフセットが オブジェクトにDateTimeOffset割り当てられます。 に が含まれているDateTimeStyles.AssumeUniversal場合styles、協定世界時 (UTC) オフセットまたは +00:00 がオブジェクトにDateTimeOffset割り当てられます。 どちらの値も指定しない場合は、ローカル タイム ゾーンのオフセットが使用されます。

input 使用される特定の日付と時刻のシンボルは、 formatProvider パラメーターによって定義されます。 の一致する要素formatsが標準書式指定子文字列の場合、 の正確なパターンinputについても同じことが当てはまります。 パラメーターには formatProvider 、次のいずれかを指定できます。

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

パラメーターは styles 、入力文字列で空白を許可するかどうかを定義し、明示的なオフセット コンポーネントのない文字列の解析方法を示し、解析操作の一環として UTC 変換をサポートします。 列挙体のすべてのメンバーは DateTimeStyles 、 を除いて NoCurrentDateDefaultサポートされています。 次の表に、サポートされている各メンバーの効果を示します。

DateTimeStyles のメンバー 動作
AdjustToUniversal inputを解析し、必要に応じて UTC に変換します。 これは、文字列を解析してから、返されたDateTimeOffsetオブジェクトの メソッドをDateTimeOffset.ToUniversalTime呼び出すことと同じです。
AssumeLocal で一致する要素に formats オフセット値を含む必要 input がない場合、返されるオブジェクトにはローカル タイム ゾーンのオフセットが指定されます DateTimeOffset 。 これが既定値です。
AssumeUniversal で一致する要素に formats オフセット値を含む必要 input がない場合、返される DateTimeOffset オブジェクトには UTC オフセット (+00:00) が与えられます。
AllowInnerWhite 内の 要素formatsで指定されていない内部空白を含めることができますinput。 日付と時刻のコンポーネントと個々のコンポーネント (オフセットを除く) の間に余分な空白が表示され、文字列を解析するときに無視されます。
AllowLeadingWhite 内の 要素formatsで指定されていない先頭のスペースを含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowTrailingWhite 内の 要素formatsで指定されていない末尾のスペースを含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowWhiteSpaces の 要素formatsで指定されていない先頭、末尾、および内部スペースを含めることができますinput。 文字列の解析時に、 の一致する要素 formats で指定されていない余分な空白文字はすべて無視されます。
None で追加の空白が許可されていないことを input示します。 一致が正常に行われるには、 の特定の要素で formats 指定されているとおりに空白を指定する必要があります。 これは既定の動作です。
RoundtripKind 構造体に プロパティが DateTimeOffset 含まれていないため、 Kind 効果はありません。

適用対象

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset)

Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs
Source:
DateTimeOffset.cs

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

public:
 static bool TryParseExact(System::String ^ input, System::String ^ format, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTimeOffset % result);
public static bool TryParseExact (string input, string format, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
public static bool TryParseExact (string? input, string? format, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles, out DateTimeOffset result);
static member TryParseExact : string * string * IFormatProvider * System.Globalization.DateTimeStyles * DateTimeOffset -> bool
Public Shared Function TryParseExact (input As String, format As String, formatProvider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTimeOffset) As Boolean

パラメーター

input
String

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

format
String

input の必要な形式を定義する形式指定子。

formatProvider
IFormatProvider

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

styles
DateTimeStyles

input に許可されている書式を示す列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

result
DateTimeOffset

メソッドが戻ったとき、 には、 の日付と時刻inputに相当する が含まれますDateTimeOffset。変換が成功した場合は 、変換に失敗した場合は DateTimeOffset.MinValue が格納されます。 input パラメーターが nullの場合、または、日時の文字列形式が formatproviderで定義された所定の書式に従う正しいものではない場合、変換に失敗します。 このパラメーターは初期化せずに渡されます。

戻り値

input パラメーターが正常に変換された場合は true。それ以外の場合は false

例外

styles に未定義の DateTimeStyles 値が含まれています。

- または -

NoCurrentDateDefault がサポートされていません。

- または -

styles に相互に排他的な DateTimeStyles 値が含まれています。

次の例では、 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset) メソッドと標準書式指定子とカスタム書式指定子、インバリアント カルチャ、およびさまざまな DateTimeStyles 値を使用して、いくつかの日付と時刻の文字列を解析します。

string dateString, format;
DateTimeOffset result;
IFormatProvider provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008";
format = "d";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AssumeUniversal,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date-only value with leading white space.
// Should return False because only trailing white space is
// specified in method call.
dateString = " 06/15/2008";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowTrailingWhite,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00";
format = "MM/dd/yyyy H:mm zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowWhiteSpaces,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00";
format = "MM/dd/yyyy H:mm:ss zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                DateTimeStyles.AllowWhiteSpaces |
                                DateTimeStyles.AdjustToUniversal,
                                out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   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 +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.
let provider = CultureInfo.InvariantCulture

// Parse date-only value with invariant culture and assume time is UTC.
let dateString = "06/15/2008"
let format = "d"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AssumeUniversal) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date-only value with leading white space.
// Should return False because only trailing white space is
// specified in method call.
let dateString = " 06/15/2008"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowTrailingWhite) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date and time value, and allow all white space.
let dateString = " 06/15/   2008  15:15    -05:00"
let format = "MM/dd/yyyy H:mm zzz"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowWhiteSpaces) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date and time and convert to UTC.
let dateString = "  06/15/2008 15:15:30 -05:00"
let format = "MM/dd/yyyy H:mm:ss zzz"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowWhiteSpaces ||| DateTimeStyles.AdjustToUniversal) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// The example displays the following output:
//    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.
Dim dateString, format As String  
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008"
format = "d"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                   DateTimeStyles.AssumeUniversal, _
                                   result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date-only value with leading white space.
' Should return False because only trailing white space is  
' specified in method call.
dateString = " 06/15/2008"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowTrailingWhite, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00"
format = "MM/dd/yyyy H:mm zzz"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00"   
format = "MM/dd/yyyy H:mm:ss zzz"       
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces Or _
                                DateTimeStyles.AdjustToUniversal, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 
' The example displays the following output:
'    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
'    ' 06/15/2008' is not in the correct format.
'    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
'    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

次の DateTimeStyles 例では、さまざまな値を使用して、 ISO 8601 に準拠すると予想される文字列の配列を解析します。 例の出力に示すように、適切な形式の文字列は、次の場合に解析に失敗します。

  • 空白と適切な DateTimeStyles フラグ (メソッド呼び出しで指定されていないなど DateTimeStyles.AllowWhiteSpaces ) が含まれています。

  • これらの要素には、範囲外の日付と時刻の要素が含まれています。

UTC オフセットを指定しない文字列は、メソッド呼び出しでフラグが指定されていない限り DateTimeStyles.AssumeUniversal 、ローカル タイム ゾーンのオフセット (この場合は 、太平洋夏時間ゾーンのオフセットを反映する -07:00) を持つものと見なされます。 その場合、それらはユニバーサル協定時刻と見なされます。

open System
open System.Globalization

let parseWithISO8601 dateStrings styles =
    printfn $"Parsing with {styles}:"
    for dateString in dateStrings do
        match DateTimeOffset.TryParseExact(dateString, "O", null, styles) with
        | true, date ->
            printfn $"""   {dateString,-35} --> {date.ToString "yyyy-MM-dd HH:mm:ss.FF zzz"}"""
        | _ ->
            printfn $"   Unable to convert '{dateString}'"

let dateStrings = 
    [ "2018-08-18T12:45:16.0000000Z"
      "2018/08/18T12:45:16.0000000Z"
      "2018-18-08T12:45:16.0000000Z"
      "2018-08-18T12:45:16.0000000"
      " 2018-08-18T12:45:16.0000000Z "
      "2018-08-18T12:45:16.0000000+02:00"
      "2018-08-18T12:45:16.0000000-07:00" ]

parseWithISO8601 dateStrings DateTimeStyles.None
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AllowWhiteSpaces
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AdjustToUniversal
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AssumeLocal
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AssumeUniversal

// The example displays the following output:
//      Parsing with None:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AllowWhiteSpaces:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AdjustToUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
//
//      -----
//
//      Parsing with AssumeLocal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AssumeUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = { "2018-08-18T12:45:16.0000000Z",
                               "2018/08/18T12:45:16.0000000Z",
                               "2018-18-08T12:45:16.0000000Z",
                               "2018-08-18T12:45:16.0000000",                               
                               " 2018-08-18T12:45:16.0000000Z ",
                               "2018-08-18T12:45:16.0000000+02:00",
                               "2018-08-18T12:45:16.0000000-07:00" }; 
      
      ParseWithISO8601(dateStrings, DateTimeStyles.None);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AllowWhiteSpaces);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AdjustToUniversal);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeLocal);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeUniversal);   }

   private static void ParseWithISO8601(string[] dateStrings, DateTimeStyles styles)
   {   
      Console.WriteLine($"Parsing with {styles}:");
      DateTimeOffset date;
      foreach (var dateString in dateStrings)
      {
         if (DateTimeOffset.TryParseExact(dateString, "O", null, styles, out date))
         {
            Console.WriteLine($"   {dateString,-35} --> {date:yyyy-MM-dd HH:mm:ss.FF zzz}");
         }
         else
         {
            Console.WriteLine($"   Unable to convert '{dateString}'");
         }   
      } 
   }
}
// The example displays the following output:
//      Parsing with None:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AllowWhiteSpaces:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AdjustToUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
//
//      -----
//
//      Parsing with AssumeLocal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AssumeUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
Imports System.Globalization

Public Module Example
   Public Sub Main()
      Dim dateStrings() = { "2018-08-18T12:45:16.0000000Z",
                            "2018/08/18T12:45:16.0000000Z",
                            "2018-18-08T12:45:16.0000000Z",
                            "2018-08-18T12:45:16.0000000",                               
                            " 2018-08-18T12:45:16.0000000Z ",
                            "2018-08-18T12:45:16.0000000+02:00",
                            "2018-08-18T12:45:16.0000000-07:00" } 
      
      ParseWithISO8601(dateStrings, DateTimeStyles.None)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AllowWhiteSpaces)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AdjustToUniversal)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeLocal)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeUniversal)   
   End Sub

   Private Sub ParseWithISO8601(dateStrings() As String, styles As DateTimeStyles)
      Console.WriteLine($"Parsing with {styles}:")
      Dim dat As DateTimeOffset
      For Each dateStr In dateStrings
         If DateTimeOffset.TryParseExact(dateStr, "O", Nothing, styles, dat) Then
            Console.WriteLine($"   {dateStr,-35} --> {dat:yyyy-MM-dd HH:mm:ss.FF zzz}")
         Else
            Console.WriteLine($"   Unable to convert '{dateStr}'")
         End If   
      Next 
   End Sub
End Module
' The example displays the following output:
'      Parsing with None:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AllowWhiteSpaces:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AdjustToUniversal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
'
'      -----
'
'      Parsing with AssumeLocal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AssumeUniversal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00

注釈

メソッドの TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset) このオーバーロードは メソッドに似ています DateTimeOffset.ParseExact(String, String, IFormatProvider, DateTimeStyles) が、変換が失敗してもこのメソッドは例外をスローしません。 パラメーターで指定されたパターンと完全に一致する必要がある日付と時刻の文字列表現を format 解析します。 文字列がこの input パターンと一致しない場合、パラメーターによって定義された styles 空白のバリエーションが考えられますが、解析操作は失敗し、 メソッドは を返します false

パラメーターは format 、1 つの標準書式指定子、または の必要なパターンを定義する 1 つ以上の inputカスタム書式指定子を含む文字列です。 有効な書式設定コードの詳細については、「 標準の日付と時刻の書式指定文字列」およびユーザー設定の日付と時刻の書式指定文字列」を参照してください。 にオフセットがz存在inputする必要があることを示す 、zz、またはzzzカスタム書式指定子が含まれている場合format、そのオフセットには負符号または正符号を含める必要があります。 符号が見つからない場合、解析操作は失敗し、 メソッドは を返します false

日付を含むがinput時刻を含まない必要がある場合format、結果のDateTimeOffsetオブジェクトには午前 0 時 (0:00:00) の時刻が割り当てられます。 日付ではなく時刻を含む必要inputがある場合format、結果DateTimeOffsetのオブジェクトにはローカル システムの現在の日付が割り当てられます。 がオフセットを含む必要がない場合format、結果DateTimeOffsetのオブジェクトのオフセットは パラメーターのstyles値によって異inputなります。 が 含まれているAssumeLocal場合styles、ローカル タイム ゾーンのオフセットが オブジェクトにDateTimeOffset割り当てられます。 が 含まれているAssumeUniversal場合styles、協定世界時 (UTC) オフセットまたは +00:00 がオブジェクトにDateTimeOffset割り当てられます。 どちらの値も指定しない場合は、ローカル タイム ゾーンのオフセットが使用されます。

で使用される特定の日付と時刻の input 記号と文字列は、 formatProvider パラメーターによって定義されます。 が標準書式指定子文字列である 場合formatinput正確なパターンについても同様です。 パラメーターには formatProvider 、次のいずれかを指定できます。

  • CultureInfo解釈される に基づいてinputカルチャを表す オブジェクト。 プロパティによってCultureInfo.DateTimeFormat返される オブジェクトはDateTimeFormatInfo、 で使用できるシンボルと標準形式をinput定義します。

  • DateTimeFormatInfo日付と時刻のデータの形式を定義する オブジェクト。

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

パラメーターは styles 、入力文字列で空白を使用できるかどうかを定義し、明示的なオフセット コンポーネントのない文字列を解析する方法を示し、解析操作の一部として UTC 変換をサポートします。 列挙体のすべての DateTimeStyles メンバーは、 を除いて NoCurrentDateDefaultサポートされています。 次の表に、サポートされている各メンバーの効果を示します。

DateTimeStyles のメンバー 動作
AdjustToUniversal inputを解析し、必要に応じて UTC に変換します。 これは、文字列を解析してから、返されたDateTimeOffsetオブジェクトの メソッドをDateTimeOffset.ToUniversalTime呼び出すことと同じです。
AssumeLocal がオフセット値を含むinput必要がない場合format、返されるオブジェクトにはローカル タイム ゾーンのオフセットが指定されますDateTimeOffset。 これは既定の動作です。
AssumeUniversal がオフセット値を含むinput必要がない場合format、返されるDateTimeOffsetオブジェクトには UTC オフセット (+00:00) が与えられます。
AllowInnerWhite input書式で指定されていない内部空白を含めることができます。 日付と時刻のコンポーネント間、およびオフセット以外の個々のコンポーネント内に余分な空白が表示される可能性があり、文字列の解析時には無視されます。
AllowLeadingWhite で指定されていない先頭のスペースをformat含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowTrailingWhite で指定されていない末尾のスペースをformat含めることができますinput。 文字列を解析する場合、これらは無視されます。
AllowWhiteSpaces で指定されていない先頭、末尾、および内部スペースをformat含めることができますinput。 文字列の解析時に、 で format 指定されていない余分な空白文字はすべて無視されます。
None で追加の空白が許可されていないことを input示します。 空白は、 で format指定したとおりに表示する必要があります。 これは既定の動作です。
RoundtripKind 構造体に プロパティが DateTimeOffsetKind まれていないため、効果はありません。

注意 (呼び出し元)

.NET Framework 4 では、 は、TryParseExact解析される文字列に時間コンポーネントと、一致しない AM/PM 指定子が含まれている場合に を返falseします。 .NET Framework 3.5 以前のバージョンでは、AM/PM 指定子は無視されます。

こちらもご覧ください

適用対象