使用.Net XML解析器时丢失时区信息

时间:2011-01-19 11:58:50

标签: .net xml timezone xml-parsing

这是我使用来自xml-webinterface的数据的问题。

界面为我提供了正确的数据,包含大量的数据块,如下所示:

<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>

.Net XML-Decoder(System.XML.Serialisation.XmlSerializer)将此(根据我的xsd sceme)解析为包含“date”属性的对象。

这是从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)时区中使用它。遗憾的是,我在时间戳交付的时区中丢失了信息(或者在解析生效后我没有找到提取此信息的方法),所以我无法改变时间戳以使其再次满足我的需求。

任何想法?哦,还有一件事。更改xml不是一个选项,所以我必须在我身边处理这个问题。

编辑:拼写错误&amp;评论的答案

1 个答案:

答案 0 :(得分:4)

尝试更改.NET代码以将其解析为DateTimeOffset而不是DateTime:

private System.DateTimeOffset dateField;

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

DateTimeOffset结构应该保留原始时间的偏移量。

感谢, 标记