Метод 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