System.TimeSpan.Parse メソッド
この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。
メソッドへの Parse 入力文字列には、次の形式の時間間隔の指定が含まれています。
[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]
角かっこ ([
および ]
) の要素は省略可能です。 中かっこ (および}
) で囲み、垂直バー ({
|) で区切られた代替候補の一覧から 1 つ選択する必要があります。 次の表は、それぞれの要素の説明です。
要素 | 説明 |
---|---|
ws | 省略可能な空白。 |
- | 負 TimeSpanの値を示す省略可能な負符号。 |
d | 0 から10675199までの日数。 |
. | 日と時間を区切るカルチャに依存するシンボル。 インバリアント形式では、ピリオド (".") 文字が使用されます。 |
hh | 0 から 23 までの時間。 |
: | カルチャに依存する時刻区切り記号。 インバリアント形式では、コロン (":") 文字が使用されます。 |
mm | 分 (0 ~ 59)。 |
ss | 0 ~ 59 の範囲の省略可能な秒。 |
. | 秒を秒の分数から区切るカルチャに依存するシンボル。 インバリアント形式では、ピリオド (".") 文字が使用されます。 |
ff | 1 ~ 7 桁の 10 進数で構成される、省略可能な秒の小数部。 |
入力文字列が日の値のみでない場合は、時間と分のコンポーネントを含める必要があります。その他のコンポーネントは省略可能です。 存在する場合は、各時間コンポーネントの値が指定された範囲内に収まるようにする必要があります。 たとえば、時間コンポーネント hh の値は、0 から 23 の間である必要があります。 このため、メソッドに "23:00:00" を Parse 渡すと、23 時間の時間間隔が返されます。 一方、"24:00:00" を渡すと、24 日間の時間間隔が返されます。 "24" は時間コンポーネントの範囲外であるため、日コンポーネントとして解釈されます。
入力文字列の構成要素は、以下の時間間隔を一括して指定するTimeSpan.MinValueTimeSpan.MaxValue必要があります。
このメソッドは Parse(String) 、現在のカルチャのカルチャ固有の各形式を使用して、入力文字列の解析を試みます。
発信者へのメモ
解析される文字列の時間間隔コンポーネントに 7 桁を超える数字が含まれている場合、.NET Framework 3.5 以前のバージョンでの解析操作の動作は、.NET Framework 4 以降のバージョンでの解析操作とは異なる場合があります。 場合によっては、.NET Framework 3.5 以前のバージョンで成功する解析操作が失敗し、.NET Framework 4 以降でスロー OverflowException されることがあります。 それ以外の場合は、.NET Framework 3.5 以前のバージョンで a FormatException をスローする解析操作が失敗し、.NET Framework 4 以降でスロー OverflowException されることがあります。 次の例は、両方のシナリオを示しています。
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
.NET