2011-01-21 3 views
6

xmlへの/からのDateTimeの書き込み/読み取りの最適な方法を知る必要があります。私は直接XMLにDateTimeまたはXMLにDateTime.ToString()を書く必要があります。XMLからの/からのDateTimeの読み取り/書き込み

2番目の質問は、xmlからdate要素を読み取る方法です。これにキャスティングを使用できますか? (日時)rec.Element( "日付")。値または私はこのDateTime.Parseような文字列解析する必要がある(rec.Element( "日")。値)

答えて

17

あなたはのキャストを使用することができますXElementまたはXAttribute、LINQ to XML、そうですが、文字列自体ではありません。 LINQ to XMLは、カルチャの設定とは無関係に、標準のXML形式を使用します。

サンプル:

using System; 
using System.Xml.Linq; 

class Test 
{  
    static void Main() 
    { 
     DateTime now = DateTime.Now; 
     XElement element = new XElement("Now", now); 

     Console.WriteLine(element); 
     DateTime parsed = (DateTime) element; 
     Console.WriteLine(parsed); 
    } 
} 

私のために出力:

<Now>2011-01-21T06:24:12.7032222+00:00</Now> 
21/01/2011 06:24:12 
+0

XElementのキャスティングが優れているか、XElement.valueを解析していますか? –

+0

@Pankaj:LINQ to XML変換を使っています。そうすれば、XMLで日付/時刻を格納するための標準形式を使用するので、他の言語と書かれたコードと完全に相互運用できます。 –

+0

LinqからXMLへの変換はどういう意味ですか?私がばかだと申し訳ありません..:P ...あなたは、XMLに直接日付を書いて、次にXElementをキャストしなければならないと言っています。 –

5

@ジョンスキートの答えの代わりには"round trip" formatを使用して文字列に日時を変換することです。これは、情報を失うことなく保存してロードする形式に変換します。

string dataToSave = myDateTime.ToString("o"); 

DateTime.Parse()を使用して再度変換します。私がリンクしたページには、文字列形式に/から変換する方法を示す例があります。この文字列をXMLに保存するだけです。これにより、データがどのように格納されるかをより詳細に制御できます(より制御したい場合)。

+0

制御は向上しますが、移植性は低下します。 XMLは日付と時刻を保存する方法を標準化しています。私は意図的にそれらから迷う前に非常に慎重に考えるでしょう。 –

+0

@ジョン:そうですね、テキストを無損失でシリアル化するより一般的な方法を指摘しようとしていましたが、実際にはそれをあまりうまく入れていませんでした - あなたが言うように、 ) –

5

XmlConvertクラスを使用して、文字列との変換を行うことができます。

関連する問題