Поделиться через


DateTimeOffset.ParseExact Метод

Определение

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент. Формат строкового представления должен точно соответствовать указанному формату.

Перегрузки

Имя Описание
ParseExact(String, String[], IFormatProvider, DateTimeStyles)

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанные форматы, сведения о формате и региональных параметрах и стиле. Формат строкового представления должен точно соответствовать одному из указанных форматов.

ParseExact(String, String, IFormatProvider, DateTimeStyles)

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанный формат, сведения о формате и региональных параметрах и стиле. Формат строкового представления должен точно соответствовать указанному формату.

ParseExact(String, String, IFormatProvider)

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанные сведения о формате и языке и региональных параметрах. Формат строкового представления должен точно соответствовать указанному формату.

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

Преобразует диапазон символов, представляющий дату и время в его DateTimeOffset эквивалент, используя указанный формат, сведения о формате и региональных параметрах и стиле. Формат представления даты и времени должен точно соответствовать указанному формату.

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

Преобразует диапазон символов, содержащий строковое представление даты и времени в эквивалент DateTimeOffset , используя указанные форматы, сведения о формате и региональных параметрах и стиле. Формат представления даты и времени должен точно соответствовать одному из указанных форматов.

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

Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанные форматы, сведения о формате и региональных параметрах и стиле. Формат строкового представления должен точно соответствовать одному из указанных форматов.

public:
 static DateTimeOffset ParseExact(System::String ^ input, cli::array <System::String ^> ^ formats, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles);
public static DateTimeOffset ParseExact(string input, string[] formats, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles);
public static DateTimeOffset ParseExact(string input, string[] formats, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles);
static member ParseExact : string * string[] * IFormatProvider * System.Globalization.DateTimeStyles -> DateTimeOffset
Public Shared Function ParseExact (input As String, formats As String(), formatProvider As IFormatProvider, styles As DateTimeStyles) As DateTimeOffset

Параметры

input
String

Строка, содержащая дату и время преобразования.

formats
String[]

Массив описателей формата, определяющих ожидаемые форматы input.

formatProvider
IFormatProvider

Объект, предоставляющий сведения inputо форматировании с учетом языка и региональных параметров.

styles
DateTimeStyles

Побитовое сочетание значений перечисления, указывающее допустимый формат input.

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в input параметре, как указано formatsпараметром , formatProviderи styles параметрами.

Исключения

Смещение больше 14 часов или меньше -14 часов.

–или–

styles включает неподдерживаемое значение.

–или–

Параметр styles содержит DateTimeStyles значения, которые нельзя использовать вместе.

input равно null.

input — пустая строка ("").

–или–

input не содержит допустимое строковое представление даты и времени.

–или–

Элемент не содержит допустимый formats описатель формата.

–или–

Компонент часа и конструктор input AM/PM не согласны.

Примеры

В следующем примере определяется несколько форматов входных данных для строкового представления значения даты и времени и смещения, а затем передает строку, введенную пользователем в DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles) метод.

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 = new 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();
   try
   {
      result = DateTimeOffset.ParseExact(input, formats, provider,
                                         DateTimeStyles.AllowWhiteSpaces);
      break;
   }
   catch (FormatException)
   {
      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 input = String.Empty
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

let mutable result = None
let mutable tries = 0
while tries < 3 && result.IsNone do
    printfn "Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),"
    printf "Then press Enter: "
    let input = stdin.ReadLine()
    printfn ""
    try
        result <- 
            DateTimeOffset.ParseExact(input, formats, provider, DateTimeStyles.AllowWhiteSpaces) 
            |> Some
    with :? FormatException ->
        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() 
    Try
       result = DateTimeOffset.ParseExact(input, formats, provider, _
                                          DateTimeStyles.AllowWhiteSpaces)
       Exit Do
    Catch e As FormatException
       Console.WriteLine("Unable to parse {0}.", input)      
       tries += 1
    End Try
 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

Комментарии

Метод DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles) анализирует строковое представление даты, которая соответствует любому из шаблонов, назначенных параметру formats . input Если строка не соответствует ни одному из этих шаблонов с любым из вариантов, определенных styles параметром, метод вызывает FormatExceptionисключение. Помимо сравнения input с несколькими шаблонами форматирования, эта перегрузка работает одинаково с методом DateTimeOffset.ParseExact(String, String, IFormatProvider, DateTimeStyles) .

Параметр formats представляет собой массив строк, элементы которого содержат один описатель стандартного input формата или один или несколько настраиваемых описателей формата, определяющих возможный шаблон параметра. При вызове input метода должен соответствовать одному из этих шаблонов. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если соответствующий элемент включает в formats себя zzzили настраиваемые описатели формата, указывающие на то, что смещение должно присутствоватьinput, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, метод вызывает FormatExceptionисключение.

Это важно

formats Использование параметра этой перегрузки для указания нескольких форматов может помочь уменьшить разочарование многих пользователей при вводе дат и времени. В частности, возможность определения нескольких шаблонов входных данных позволяет приложению обрабатывать представления даты и времени, которые могут включать или не содержать начальные нули в месяцах, днях, часах, минутах и секундах. В этом примере представлена иллюстрация этого.

Если соответствующий элемент требует formats , чтобы input он содержал дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если соответствующий элемент требует formatsinput наличия времени, но не даты, результирующий DateTimeOffset объект назначает текущую дату в локальной системе. Если соответствующий элемент formats не требует input смещения, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного inputформата, если соответствующий элемент является строкой описателя стандартного formats формата. Параметр formatProvider может иметь одно из следующих значений:

  • Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации input . Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и форматирование в input.

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование в формате UTC в рамках операции синтаксического анализа. Поддерживаются все члены DateTimeStyles перечисления, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

ЧленDateTimeStyles Поведение
AdjustToUniversal Анализирует input и при необходимости преобразует его в UTC. Он эквивалентен синтаксическому анализу строки и вызову DateTimeOffset.ToUniversalTime метода возвращаемого DateTimeOffset объекта.
AssumeLocal Если соответствующий элемент formats не требует, чтобы input оно содержало значение смещения, возвращенный DateTimeOffset объект получает смещение локального часового пояса. Это значение по умолчанию.
AssumeUniversal Если соответствующий элемент formats не требует input значения смещения, возвращенный DateTimeOffset объект получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные в параметре format. Дополнительное пробелы могут отображаться между компонентами даты и времени и внутри отдельных компонентов (за исключением смещения), и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные в параметре formats. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные в параметре formats. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пробелы, не указанные.formats Все дополнительные символы пробела, не указанные в сопоставленном элементе, formats игнорируются при анализе строки.
None Указывает, что в ней запрещено inputдополнительное пробел. Пробел должен отображаться точно так же, как указано в определенном элементе formats для сопоставления. Это поведение по умолчанию.
RoundtripKind Не действует, так как DateTimeOffset структура не включает Kind свойство.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

См. также раздел

Применяется к

ParseExact(String, String, IFormatProvider, DateTimeStyles)

Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанный формат, сведения о формате и региональных параметрах и стиле. Формат строкового представления должен точно соответствовать указанному формату.

public:
 static DateTimeOffset ParseExact(System::String ^ input, System::String ^ format, IFormatProvider ^ formatProvider, System::Globalization::DateTimeStyles styles);
public static DateTimeOffset ParseExact(string input, string format, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles);
public static DateTimeOffset ParseExact(string input, string format, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles);
static member ParseExact : string * string * IFormatProvider * System.Globalization.DateTimeStyles -> DateTimeOffset
Public Shared Function ParseExact (input As String, format As String, formatProvider As IFormatProvider, styles As DateTimeStyles) As DateTimeOffset

Параметры

input
String

Строка, содержащая дату и время преобразования.

format
String

Описатель формата, определяющий ожидаемый формат input.

formatProvider
IFormatProvider

Объект, предоставляющий сведения inputо форматировании с учетом языка и региональных параметров.

styles
DateTimeStyles

Побитовое сочетание значений перечисления, указывающее допустимый формат input.

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в input параметре, как указано formatпараметром , formatProviderи styles параметрами.

Исключения

Смещение больше 14 часов или меньше -14 часов.

–или–

Параметр styles содержит неподдерживаемое значение.

–или–

Параметр styles содержит DateTimeStyles значения, которые нельзя использовать вместе.

input равно null.

–или–

format равно null.

input — пустая строка ("").

–или–

input не содержит допустимое строковое представление даты и времени.

–или–

format — пустая строка.

–или–

Компонент часа и конструктор input AM/PM не согласны.

Примеры

В следующем примере метод используется DateTimeOffset.ParseExact(String, String, IFormatProvider, DateTimeStyles) с описателями стандартного и пользовательского формата, инвариантным языком и региональными параметрами и различными DateTimeStyles значениями для анализа нескольких строк даты и времени.

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

// Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008";
format = "d";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AssumeUniversal);
   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 with leading white space.
// Should throw a FormatException because only trailing white space is
// specified in method call.
dateString = " 06/15/2008";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowTrailingWhite);
   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 value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00";
format = "MM/dd/yyyy H:mm zzz";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowWhiteSpaces);
   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 and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00";
format = "MM/dd/yyyy H:mm:ss zzz";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowWhiteSpaces |
                                      DateTimeStyles.AdjustToUniversal);
   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 +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"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider, DateTimeStyles.AssumeUniversal)
    printfn $"'{dateString}' converts to {result}."
with :? FormatException ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date-only value with leading white space.
// Should throw a FormatException because only trailing white space is
// specified in method call.
let dateString = " 06/15/2008"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider, DateTimeStyles.AllowTrailingWhite)
    printfn $"'{dateString}' converts to {result}."
with :? FormatException ->
    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"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider, DateTimeStyles.AllowWhiteSpaces)
    printfn $"'{dateString}' converts to {result}."
with :? FormatException ->
    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"
try
    let result = 
        DateTimeOffset.ParseExact(dateString, format, provider,
                                  DateTimeStyles.AllowWhiteSpaces |||
                                  DateTimeStyles.AdjustToUniversal)
    printfn $"'{dateString}' converts to {result}."
with :? FormatException ->
    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"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AssumeUniversal)
   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 with leading white space.
' Should throw a FormatException because only trailing white space is  
' specified in method call.
dateString = " 06/15/2008"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowTrailingWhite)
   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 value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00"
format = "MM/dd/yyyy H:mm zzz"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowWhiteSpaces)
   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 and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00"   
format = "MM/dd/yyyy H:mm:ss zzz"       
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowWhiteSpaces Or _
                                      DateTimeStyles.AdjustToUniversal)
   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 
' 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.

В следующем примере для анализа массива строк, которые, как ожидается, соответствуют ISO 8601, используются различные DateTimeStyles значения. Как показано в выходных данных примера, строки, которые находятся в правильном формате, не могут анализироваться, если:

  • они содержат пробелы и соответствующий DateTimeStyles флаг (например DateTimeStyles.AllowWhiteSpaces , не был предоставлен в вызове метода.

  • они содержат элементы даты и времени, которые находятся вне диапазона.

Предполагается, что строки, не указывающие смещение в формате UTC, имеют смещение локального часового пояса (в данном случае –07:00), если DateTimeStyles.AssumeUniversal флаг не указан в вызове метода. В этом случае они считаются универсальным координированным временем.

module parseexact_iso8601_2

open System
open System.Globalization

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" |] 

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

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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         FormatException: 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}:");
      foreach (var dateString in dateStrings)
      {
         try {
            var date = DateTimeOffset.ParseExact(dateString, "O", null, styles);
            Console.WriteLine($"   {dateString,-35} --> {date:yyyy-MM-dd HH:mm:ss.FF zzz}");
         }
         catch (FormatException)
         {
            Console.WriteLine($"   FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         FormatException: 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
//         FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//         FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         FormatException: 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}:")
      For Each dateStr In dateStrings
         Try 
            Dim dat = DateTimeOffset.ParseExact(dateString, "O", Nothing, styles)
            Console.WriteLine($"   {dateString,-35} --> {dat:yyyy-MM-dd HH:mm:ss.FF zzz}")
         catch e As FormatException
            Console.WriteLine($"   FormatException: Unable to convert '{dateString}'")
         End Try   
      Next 
   End Sub
End Module
' The example displays the following output:
'      Parsing with None:
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'
'      -----
'
'      Parsing with AllowWhiteSpaces:
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'
'      -----
'
'      Parsing with AdjustToUniversal:
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'
'      -----
'
'      Parsing with AssumeLocal:
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'
'      -----
'
'      Parsing with AssumeUniversal:
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'
'         FormatException: Unable to convert '07-30-2018'

Комментарии

Метод DateTimeOffset.ParseExact(String, String, IFormatProvider, DateTimeStyles) анализирует строковое представление даты, которое должно быть в формате, определенном параметром format . Кроме того, требуется, чтобы <элементы даты>, <времени> и <смещения> строкового представления даты и времени отображались в порядке, указанном в указанном.format input Если строка не соответствует шаблону format параметра, при каких-либо вариациях, определенных styles параметром, метод вызывает исключениеFormatException. Напротив, метод анализирует строковое представление даты в любом из форматов, DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) распознаваемых объектом поставщика DateTimeFormatInfo формата. Parse также позволяет <элементам даты>, <времени> и <смещения> строкового представления даты и времени отображаться в любом порядке.

Параметр format — это строка, содержащая один описатель стандартного input формата или один или несколько настраиваемых описателей формата, определяющих обязательный шаблон параметра. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если format содержит zописатели формата , zzили настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, метод вызывает FormatExceptionисключение.

Если format требуется, чтобы input содержать дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если format требуется, чтобы input он содержал время, но не дату, результирующий DateTimeOffset объект назначается текущая дата в локальной системе. Если format не требуется input смещение, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного формата, если format это строка описателя стандартного inputформата. Параметр formatProvider может иметь одно из следующих значений:

  • Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации input . Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и форматирование в input.

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование в формате UTC в рамках операции синтаксического анализа. Поддерживаются все члены DateTimeStyles перечисления, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

ЧленDateTimeStyles Поведение
AdjustToUniversal Анализирует input и при необходимости преобразует его в UTC. Он эквивалентен синтаксическому анализу строки и вызову DateTimeOffset.ToUniversalTime метода возвращаемого DateTimeOffset объекта.
AssumeLocal Если format не требуется, чтобы input оно содержало значение смещения, возвращенный DateTimeOffset объект получает смещение локального часового пояса. Это значение по умолчанию.
AssumeUniversal Если format не требуется, чтобы input оно содержало значение смещения, возвращенный DateTimeOffset объект получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные в параметре format. Дополнительное пробел может отображаться между компонентами даты и времени и внутри отдельных компонентов и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные в параметре format. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные в параметре format. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пробелы, не указанные.format Все дополнительные символы пробелов, не указанные в format , игнорируются при анализе строки.
None Указывает, что в ней запрещено inputдополнительное пробел. Пробел должен отображаться точно так же, как указано в format. Это поведение по умолчанию.
RoundtripKind Не действует, так как DateTimeOffset структура не включает Kind свойство.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

См. также раздел

Применяется к

ParseExact(String, String, IFormatProvider)

Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs

Преобразует указанное строковое представление даты и времени в его DateTimeOffset эквивалент, используя указанные сведения о формате и языке и региональных параметрах. Формат строкового представления должен точно соответствовать указанному формату.

public:
 static DateTimeOffset ParseExact(System::String ^ input, System::String ^ format, IFormatProvider ^ formatProvider);
public static DateTimeOffset ParseExact(string input, string format, IFormatProvider formatProvider);
public static DateTimeOffset ParseExact(string input, string format, IFormatProvider? formatProvider);
static member ParseExact : string * string * IFormatProvider -> DateTimeOffset
Public Shared Function ParseExact (input As String, format As String, formatProvider As IFormatProvider) As DateTimeOffset

Параметры

input
String

Строка, содержащая дату и время преобразования.

format
String

Описатель формата, определяющий ожидаемый формат input.

formatProvider
IFormatProvider

Объект, предоставляющий сведения inputо форматировании с учетом языка и региональных параметров.

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в input соответствии с указанным format и formatProvider.

Исключения

Смещение больше 14 часов или меньше -14 часов.

input равно null.

–или–

format равно null.

input — пустая строка ("").

–или–

input не содержит допустимое строковое представление даты и времени.

–или–

format — пустая строка.

–или–

Компонент часа и конструктор input AM/PM не согласны.

Примеры

В следующем примере метод используется DateTimeOffset.ParseExact(String, String, IFormatProvider) с описателями стандартного и пользовательского формата и инвариантным языком и региональными параметрами для анализа нескольких строк даты и времени.

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

// Parse date-only value with invariant culture.
dateString = "06/15/2008";
format = "d";
try
{
   result = DateTimeOffset.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 = DateTimeOffset.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 = DateTimeOffset.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 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 = DateTimeOffset.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 -07:00.
//    6/15/2008 is not in the correct format.
//    Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 8:30:00 AM -06:00.
//    Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
let provider = CultureInfo.InvariantCulture

// Parse date-only value with invariant culture.
let dateString = "06/15/2008"
let format = "d"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider)
    printfn $"{dateString} converts to {result}."
with :? FormatException ->
    printfn $"{dateString} is not in the correct format."

// 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.
let dateString = "6/15/2008"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider)
    printfn $"{dateString} converts to {result}."
with :? FormatException ->
    printfn $"{dateString} is not in the correct format."

// Parse date and time with custom specifier.
let dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
let format = "ddd dd MMM yyyy h:mm tt zzz"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider)
    printfn $"{dateString} converts to {result}."
with :? FormatException ->
    printfn $"{dateString} is not in the correct format."

// Parse date and time with offset without offset//s minutes.
// Should throw a FormatException because "zzz" specifier requires leading
// zero in hours.
let dateString = "Sun 15 Jun 2008 8:30 AM -06"
try
    let result = DateTimeOffset.ParseExact(dateString, format, provider)
    printfn $"{dateString} converts to {result}."
with :? FormatException ->
    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 -07:00.
//    6/15/2008 is not in the correct format.
//    Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 8:30:00 AM -06:00.
//    Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
Dim dateString, format As String  
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture.
dateString = "06/15/2008"
format = "d"
Try
   result = DateTimeOffset.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 = DateTimeOffset.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 = DateTimeOffset.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 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 = DateTimeOffset.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 
' The example displays the following output:
'    06/15/2008 converts to 6/15/2008 12:00:00 AM -07:00.
'    6/15/2008 is not in the correct format.
'    Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 8:30:00 AM -06:00.
'    Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.

В следующем примере анализируется массив строк, которые, как ожидается, соответствуют ISO 8601. Как показано в выходных данных примера, строки с начальными или конечными пробелами не могут успешно анализироваться, как и строки с элементами даты и времени, которые находятся вне диапазона.

module parseexact_iso8601

open System

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.0000000Z "
      "2018-08-18T12:45:16.0000000+02:00"
      "2018-08-18T12:45:16.0000000-07:00" ]

for dateString in dateStrings do
    try
        let date =
            DateTimeOffset.ParseExact(dateString, "O", null)

        printfn $"""{dateString, -35} --> {date.ToString "yyyy-MM-dd HH:mm:ss.FF zzz"}"""
    with :? FormatException -> printfn $"FormatException: Unable to convert '{dateString}'"


// The example displays the following output:
//      2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//      FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//      FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//      FormatException: 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;

public class Example2
{
   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.0000000Z ",
                               "2018-08-18T12:45:16.0000000+02:00",
                               "2018-08-18T12:45:16.0000000-07:00" }; 
      
      foreach (var dateString in dateStrings)
      {
         try {
            var date = DateTimeOffset.ParseExact(dateString, "O", null);
            Console.WriteLine($"{dateString,-35} --> {date:yyyy-MM-dd HH:mm:ss.FF zzz}");
         }
         catch (FormatException)
         {
            Console.WriteLine($"FormatException: Unable to convert '{dateString}'");
         }   
      } 
   }
}
// The example displays the following output:
//      2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//      FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
//      FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
//      FormatException: 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
Public Module Example
   Public Sub Main()
      Dim dateStrings() As String = { "2018-08-18T12:45:16.0000000Z",
                                      "2018/08/18T12:45:16.0000000Z",
                                      "2018-18-08T12:45:16.0000000Z",
                                      " 2018-08-18T12:45:16.0000000Z ",
                                      "2018-08-18T12:45:16.0000000+02:00",
                                      "2018-08-18T12:45:16.0000000-07:00" } 
      
      For Each dateStr In dateStrings
         Try 
            Dim dat = DateTimeOffset.ParseExact(dateStr, "O", Nothing)
            Console.WriteLine($"{dateStr,-35} --> {dat:yyyy-MM-dd HH:mm:ss.FF zzz}")
         Catch  e As FormatException
            Console.WriteLine($"FormatException: Unable to convert '{dateStr}'")
         End Try   
      Next 
   End Sub
End Module
' The example displays the following output:
'      2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'      FormatException: Unable to convert '2018/08/18T12:45:16.0000000Z'
'      FormatException: Unable to convert '2018-18-08T12:45:16.0000000Z'
'      FormatException: 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

Комментарии

Метод ParseExact(String, String, IFormatProvider) анализирует строковое представление даты, которое должно быть в формате, определенном параметром format . Кроме того, требуется, чтобы <элементы даты>, <времени> и <смещения> строкового представления даты и времени отображались в порядке, указанном в указанном.format input Если строка не соответствует этому format параметру, метод создает исключениеFormatException. Напротив, метод анализирует строковое представление даты в любом из форматов, DateTimeOffset.Parse(String, IFormatProvider) распознаваемых объектом поставщика DateTimeFormatInfo формата. Parse также позволяет <элементам даты>, <времени> и <смещения> строкового представления даты и времени отображаться в любом порядке.

Параметр format представляет собой строку, содержащую один описатель стандартного input формата или один или несколько настраиваемых описателей формата, определяющих обязательный формат параметра. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если format содержит zописатели формата , zzили настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, метод вызывает FormatExceptionисключение.

Если format требуется, чтобы input содержать дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если format требуется, чтобы input он содержал время, но не дату, результирующий DateTimeOffset объект назначается текущая дата в локальной системе. Если format не требуется, что input содержит смещение, результирующий DateTimeOffset объект назначается смещение часового пояса локальной системы.

Определенные символы даты и времени, используемые в input параметре, определяются formatProvider точной input форматом, если format это строка описателя стандартного формата. Параметр formatProvider может иметь одно из следующих значений:

  • Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации input . Объект, DateTimeFormatInfo возвращаемый его DateTimeFormat свойством, определяет символы и форматирование в input.

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

См. также раздел

Применяется к

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

Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs

Преобразует диапазон символов, представляющий дату и время в его DateTimeOffset эквивалент, используя указанный формат, сведения о формате и региональных параметрах и стиле. Формат представления даты и времени должен точно соответствовать указанному формату.

public static DateTimeOffset ParseExact(ReadOnlySpan<char> input, ReadOnlySpan<char> format, IFormatProvider? formatProvider, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
public static DateTimeOffset ParseExact(ReadOnlySpan<char> input, ReadOnlySpan<char> format, IFormatProvider formatProvider, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
static member ParseExact : ReadOnlySpan<char> * ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles -> DateTimeOffset
Public Shared Function ParseExact (input As ReadOnlySpan(Of Char), format As ReadOnlySpan(Of Char), formatProvider As IFormatProvider, Optional styles As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTimeOffset

Параметры

input
ReadOnlySpan<Char>

Диапазон символов, представляющий дату и время.

format
ReadOnlySpan<Char>

Диапазон символов, содержащий описатель формата, определяющий ожидаемый формат input.

formatProvider
IFormatProvider

Объект, предоставляющий сведения о форматировании, зависящее от inputязыка и региональных параметров.

styles
DateTimeStyles

Побитовое сочетание значений перечисления, указывающее допустимый формат input.

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в input параметре, как указано formatпараметром , formatProviderи styles параметрами.

Исключения

Смещение больше 14 часов или меньше -14 часов. -или- Параметр styles содержит неподдерживаемое значение. -или- Параметр styles содержит DateTimeStyles значения, которые нельзя использовать вместе.

input — пустой диапазон символов. -или- input не содержит допустимое строковое представление даты и времени. -или- format является пустым диапазоном символов. -или- Компонент часа и конструктор AM/PM не input согласны.

Комментарии

Этот метод анализирует диапазон символов, представляющий дату, которая должна быть в формате, определенном параметром format . Кроме того, требуется, чтобы <элементы даты>, <времени> и <смещения> строкового представления даты и времени отображались в порядке, указанном в указанном.format Если input шаблон не соответствует format , метод создает исключение FormatException. Напротив, метод анализирует строковое представление даты в любом из форматов, DateTimeOffset.Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles) распознаваемых объектом поставщика DateTimeFormatInfo формата. Parse также позволяет <элементам даты>, <времени> и <смещения> строкового представления даты и времени отображаться в любом порядке.

Параметр format — это диапазон символов, содержащий описатель стандартного формата с одним символом или один или несколько настраиваемых описателей формата, определяющих требуемый формат input параметра. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если format содержит zописатели формата , zzили настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, метод вызывает FormatExceptionисключение.

Если format требуется, чтобы input содержать дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если format требуется, чтобы input он содержал время, но не дату, результирующий DateTimeOffset объект назначается текущая дата в локальной системе. Если format не требуется, что input содержит смещение, результирующий DateTimeOffset объект назначается смещение часового пояса локальной системы.

Определенные символы даты и времени, используемые в input параметре, определяются formatProvider параметром, как и точный формат input , если format это стандартный описатель формата. Параметр formatProvider может иметь одно из следующих значений:

  • Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации input . Объект, DateTimeFormatInfo возвращаемый его DateTimeFormat свойством, определяет символы и форматирование в input.

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Применяется к

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

Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs
Исходный код:
DateTimeOffset.cs

Преобразует диапазон символов, содержащий строковое представление даты и времени в эквивалент DateTimeOffset , используя указанные форматы, сведения о формате и региональных параметрах и стиле. Формат представления даты и времени должен точно соответствовать одному из указанных форматов.

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

Параметры

input
ReadOnlySpan<Char>

Диапазон символов, содержащий дату и время преобразования.

formats
String[]

Массив описателей формата, определяющих ожидаемые форматы input.

formatProvider
IFormatProvider

Объект, предоставляющий сведения inputо форматировании с учетом языка и региональных параметров.

styles
DateTimeStyles

Побитовое сочетание значений перечисления, указывающее допустимый формат input.

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в input параметре, как указано formatsпараметром , formatProviderи styles параметрами.

Исключения

Смещение больше 14 часов или меньше -14 часов. -или- styles включает неподдерживаемое значение. -или- Параметр styles содержит DateTimeStyles значения, которые нельзя использовать вместе.

input — пустой диапазон символов. -или- input не содержит допустимое строковое представление даты и времени. -или- Элемент No formats содержит допустимый описатель формата. -или- Компонент часа и конструктор AM/PM не input согласны.

Комментарии

Этот метод анализирует диапазон символов, представляющий дату, которая соответствует любому из шаблонов, назначенных параметру formats . Если input ни один из этих шаблонов не соответствует ни одному из вариантов, определенных styles параметром, метод вызывает исключение FormatException. Помимо сравнения input с несколькими шаблонами форматирования, эта перегрузка работает одинаково с методом DateTimeOffset.ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles) .

Параметр formats представляет собой массив строк, элементы которого содержат один описатель стандартного input формата или один или несколько настраиваемых описателей формата, определяющих возможный шаблон параметра. При вызове input метода должен соответствовать одному из этих шаблонов. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если соответствующий элемент включает в formats себя zzzили настраиваемые описатели формата, указывающие на то, что смещение должно присутствоватьinput, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, метод вызывает FormatExceptionисключение.

Это важно

formats Использование параметра этой перегрузки для указания нескольких форматов может помочь уменьшить разочарование многих пользователей при вводе дат и времени. В частности, возможность определения нескольких шаблонов входных данных позволяет приложению обрабатывать представления даты и времени, которые могут включать или не содержать начальные нули в месяцах, днях, часах, минутах и секундах.

Если соответствующий элемент требует formats , чтобы input он содержал дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если соответствующий элемент требует formatsinput наличия времени, но не даты, результирующий DateTimeOffset объект назначает текущую дату в локальной системе. Если соответствующий элемент formats не требует input смещения, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного inputформата, если соответствующий элемент является строкой описателя стандартного formats формата. Параметр formatProvider может иметь одно из следующих значений:

  • Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации input . Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и форматирование в input.

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование в формате UTC в рамках операции синтаксического анализа. Поддерживаются все члены DateTimeStyles перечисления, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

ЧленDateTimeStyles Поведение
AdjustToUniversal Анализирует input и при необходимости преобразует его в UTC. Он эквивалентен синтаксическому анализу строки и вызову DateTimeOffset.ToUniversalTime метода возвращаемого DateTimeOffset объекта.
AssumeLocal Если соответствующий элемент formats не требует, чтобы input оно содержало значение смещения, возвращенный DateTimeOffset объект получает смещение локального часового пояса. Это значение по умолчанию.
AssumeUniversal Если соответствующий элемент formats не требует input значения смещения, возвращенный DateTimeOffset объект получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные в параметре format. Дополнительное пробелы могут отображаться между компонентами даты и времени и внутри отдельных компонентов (за исключением смещения), и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные в параметре formats. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные в параметре formats. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пробелы, не указанные.formats Все дополнительные символы пробела, не указанные в сопоставленном элементе, formats игнорируются при анализе строки.
None Указывает, что в ней запрещено inputдополнительное пробел. Пробел должен отображаться точно так же, как указано в определенном элементе formats для сопоставления. Это поведение по умолчанию.
RoundtripKind Не действует, так как DateTimeOffset структура не включает Kind свойство.

Применяется к