2011-01-19 14 views
1

ここでは、XML Web Interfaceのデータを使用して問題が発生します。.Net XMLパーサーを使用中にタイムゾーン情報が失われる

インタフェースは、このようなデータブロックの多くが付いて正しいデータを私に提供:

<item> 
<date>2011-01-19T09:02:00+01:00</date> 
<open>46.625</open> 
<high>46.625</high> 
<low>46.62</low> 
<close>46.62</close> 
<volume>827</volume> 
<count>2</count> 
<type>TRADE</type> 
</item> 

ネットXML-デコーダ(System.XML.Serialisation.XmlSerializer)が(私のxsd scemeに応じて)、これを解析し、 「日付」属性を含むオブジェクトに変換します。ここ

は、コードが、XSDから生成切り取らある:[System.CodeDom.Compiler.GeneratedCodeAttribute( "XSD"、 "2.0.50727.3038")] [System.SerializableAttribute()]

[System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "コード")] 公共部分クラスTimeseriesElement {

private System.DateTime dateField; 

    /// <remarks/> 
    public System.DateTime date { 
     get { 
      return this.dateField; 
     } 
     set { 
      this.dateField = value; 
     } 
    } 
} 

他の値を含むこれから1つの派生があります。面白いことは何もありませんね。私の問題は、タイムゾーンに関する情報が既になくなっていることです。はい。タイムスタンプは、システムが現在動作している現在のタイムゾーンに正しく変更されています。また、ユーザーが+1以外のタイムゾーンにある場合にのみ発生します。

私はそれを望んでいません。私はこれで大丈夫ですが、タイムスタンプを変更して元の(+ 1)タイムゾーンで使用したくない場合があります。残念ながら、タイムスタンプが配信されたタイムゾーンの情報が失われています(または、解析後にこの情報を抽出する方法が見つかりませんでした)ので、タイムスタンプを変更して自分のニーズに再び適合させることはできません。

すべてのアイデア?ああ、もう一つ。 xmlの変更はオプションではないので、私はこの問題を私の側で処理しなければなりません。

編集:コメントへのタイプミス&答えを

+1

マーク? –

+1

".Net XML-Decoder"とは何ですか? – Andrey

答えて

4

がのDateTimeOffsetではなく、日時とそれを解析するために、あなたの.NETコードを変更してみてください:

private System.DateTimeOffset dateField; 

/// <remarks/> 
public System.DateTimeOffset date { 
    get { 
     return this.dateField; 
    } 
    set { 
     this.dateField = value; 
    } 
} 

のDateTimeOffset構造は、元のオフセットを維持する必要があります時間。

おかげで、あなたはXMLを読み込んであなたのコードの例を投稿することができます

+0

さて、それはスタートです。残念ながら、コードの上記の部分はコンパイラで生成されているので、xsdを変更してDateTimeOffsetを生成する必要があります。 また、msdnヘルプを引用するには: "DateTimeOffset値にはオフセットが含まれていますが、完全な時間帯対応のデータ構造ではありませんが、UTCからのオフセットはタイムゾーンの特徴ですが、複数のタイムゾーンがUTCと同じオフセットを共有するだけでなく、夏時間を観測すると、単一のタイムゾーンのオフセットが変化します。 – Stimpatch

関連する問題