ISO8601 TimeSpan を C# TimeSpan に変換するにはどうすればいいですか? 質問する

ISO8601 TimeSpan を C# TimeSpan に変換するにはどうすればいいですか? 質問する

次の操作を実行しようとすると、 が表示されますSystem.FormatException(例):

TimeSpan ts = XmlConvert.ToTimeSpan("P72H");

私は調査しましたISO8601規格正しいように思えますが、何をしても例外をスローせずに時間を解析することはできません。

ありがとう!

編集:

例外の詳細:

System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P72H' is not a valid TimeSpan value.
Source=System.Xml

ベストアンサー1

文字列に時間区切り記号を追加する必要があります。次のように試してください。

TimeSpan ts = XmlConvert.ToTimeSpan("PT72H");

期間の仕様を参照してください -http://www.w3.org/TR/xmlschema-2/#継続時間

3.2.6.1 語彙表現
期間の語彙表現は、[ISO 8601] 拡張形式 PnYn MnDTnH nMnS です。ここで、nY は年数、nM は月数、nD は日数、'T' は日付/時刻区切り、nH は時間数、nM は分数、nS は秒数を表します。秒数には任意の精度の 10 進数を含めることができます。

コメントに基づいて編集/更新

ISO 8601 標準の一部であるのに、なぜこの文字列P2M2W5Dが有効とみなされないのかという疑問があったので、誰かがこの問題に遭遇してもコメントを読まなくても答えが得られるように、この更新を追加したいと思いました。問題は、問題の元の文字列と、文字列が W3C XML スキーマに準拠している必要があることです (TimeSpanWP72HP2M2W5DXmlConvert.ToTimeSpanW)。W3C XML スキーマ (上記リンク) を見ると、ISO 8601 標準、特にセクション 5.5.3.2.1 が参照されており、 XML スキーマで が有効な文字ではない理由が示されています。

週は繰り越しポイント(52または53)が定義されていないため、これらのアプリケーションでは週を使用しないでください。

おすすめ記事