7

私の目標は、(C# で) .NET DateTime オブジェクトを使用し、標準に準拠した方法で (XML で使用するために) 文字列にシリアル化および解析することです。私が念頭に置いている特定の標準は、日付と時刻を表すための ISO 8601 標準です。

フォーマットの連結バージョンとの間で変換する使いやすいソリューション (できれば、それぞれの方法で 1 つのメソッド呼び出し) が必要です。また、ローカル タイム ゾーン情報も保持したいと考えています。

取得したい文字列の種類の例を次に示します。

2009-04-15T10:55:03.0174-05:00

対象の .NET バージョンは 3.5 です。

数年前に、カスタム形式と DateTime.ToString(string) メソッドを含むこの問題の解決策を実際に見つけました。より単純な標準準拠のソリューションが存在しないことに驚きました。カスタムフォーマット文字列を使用して、標準に準拠した方法でシリアル化および解析することは、私には少し臭いです。

4

4 に答える 4

15

幸いなことに、この形式を処理するものがXmlConvert.ToString()あります。XmlConvert.ToDateTime()

string s = XmlConvert.ToString(DateTime.Now,
     XmlDateTimeSerializationMode.Local);
DateTime dt = XmlConvert.ToDateTime(s,
     XmlDateTimeSerializationMode.Local);

(適切なシリアル化モードを選択してください)

于 2009-04-15T16:11:23.640 に答える
4

dateobj.ToString( "s")は、ISO 8601準拠の文字列表現を取得します。これは、DateTime.Parse()で逆シリアル化できます。

于 2009-04-15T16:13:50.483 に答える
3

.NETは、この点で過去数年間で少し改善されたようです。System.Xml.XmlConvertオブジェクトは、このコンテキストに現れるニーズのクラス全体に対応するように設計されているようです。次の関数は、柔軟で標準に準拠した方法でDateTimeオブジェクトの変換に対処するように特別に設計されているようです。

XmlConvert.ToDateTime(string, System.Xml.XmlDateTimeSerializationMode)


XmlConvert.ToString(DateTime, System.Xml.XmlDateTimeSerializationMode)

次の列挙型メンバーは、元のタイムゾーン情報を保持する場合に特に便利です。

System.Xml.XmlDateTimeSerializationMode.RoundtripKind

MSDNの関数のドキュメントへのリンクは次のとおりです。

XmlConvert.ToDateTime(string、System.Xml.XmlDateTimeSerializationMode)

XmlConvert.ToString(DateTime、System.Xml.XmlDateTimeSerializationMode)

于 2009-04-15T16:12:54.167 に答える
1

これを試して:

System.Xml.XmlConvert.ToString(TimeStamp, System.Xml.XmlDateTimeSerializationMode.Utc))
于 2009-04-15T16:13:09.393 に答える