Метод System.TimeSpan.Parse

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Входная строка Parse для методов содержит спецификацию интервала времени в форме:

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

Элементы в квадратных скобках ([ и ]) являются необязательными. Один выбор из списка альтернативных вариантов, заключенных в фигурные скобки ({ и }) и разделенный вертикальными полосами (|) является обязательным. Каждый из элементов описан в таблице ниже.

Элемент Description
ws Необязательный пробел.
- Необязательный знак минуса, указывающий на отрицательный TimeSpanзнак.
дн. Дни, от 0 до 10675199.
. Символ с учетом языка и региональных параметров, который отделяет дни от часов. В инвариантном формате используется символ точки (".").
hh Часы, от 0 до 23.
: Символ разделителя времени с учетом языка и региональных параметров. В инвариантном формате используется символ двоеточия (":").
mm Минуты, от 0 до 59.
ss Необязательные секунды, от 0 до 59.
. Символ с учетом языка и региональных параметров, который отделяет секунды от дробей секунды. В инвариантном формате используется символ точки (".").
ff Необязательные дробные секунды, состоящие из одной до семи десятичных цифр.

Если входная строка не является только значением дня, она должна содержать часы и компоненты минут; другие компоненты являются необязательными. Если они присутствуют, значения каждого компонента времени должны находиться в указанном диапазоне. Например, значение hh, компонент часов, должен быть в диапазоне от 0 до 23. Из-за этого передача метода "23:00:00" возвращает Parse интервал времени в 23 часа. С другой стороны, передача "24:00:00" возвращает интервал времени в 24 дня. Так как "24" находится вне диапазона компонента часов, он интерпретируется как компонент days.

Компоненты входной строки должны совместно указывать интервал времени, который больше или равен TimeSpan.MinValue и меньше или равен TimeSpan.MaxValue.

Метод Parse(String) пытается проанализировать входную строку с помощью каждого из форматов языка и региональных параметров для текущего языка и региональных параметров.

Заметки для вызывающих абонентов

Если компонент интервала времени в строке для анализа содержит более семи цифр, операции синтаксического анализа в платформа .NET Framework 3.5 и более ранних версиях могут вести себя по-разному от операций синтаксического анализа в платформа .NET Framework 4 и более поздних версиях. В некоторых случаях операции синтаксического анализа, которые выполняются в платформа .NET Framework 3.5 и более ранних версиях, могут завершаться ошибкой OverflowException и вызывать платформа .NET Framework 4 и более поздних версий. В других случаях операции синтаксического анализа, которые вызывают FormatException платформа .NET Framework 3.5 и более ранних версий, могут завершиться ошибкой и вызвать OverflowException платформа .NET Framework 4 и более поздних версий. В следующем примере показаны оба сценария.

string[] values = { "000000006", "12.12:12:12.12345678" };
foreach (string value in values)
{
   try {
      TimeSpan interval = TimeSpan.Parse(value);
      Console.WriteLine("{0} --> {1}", value, interval);
   }   
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }   
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}

// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format      
// Output from .NET Framework 4 and later versions or .NET Core:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow
open System

let values = [| "000000006"; "12.12:12:12.12345678" |]
for value in values do
    try
        let interval = TimeSpan.Parse value
        printfn $"{value} --> {interval}"   
    with
    | :? FormatException ->
        printfn $"{value}: Bad Format"
    | :? OverflowException ->
        printfn $"{value}: Overflow"

// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format      
// Output from .NET Framework 4 and later versions or .NET Core:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow
Dim values() As String = { "000000006", "12.12:12:12.12345678" }
For Each value As String In values
   Try
      Dim interval As TimeSpan = TimeSpan.Parse(value)
      Console.WriteLine("{0} --> {1}", value, interval)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try         
Next
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
'       12.12:12:12.12345678: Bad Format      
' Output from .NET Framework 4:
'       000000006: Overflow
'       12.12:12:12.12345678: Overflow