【问题标题】:XML Deserialize wrongly interprets a date [duplicate]XML反序列化错误地解释了日期[重复]
【发布时间】:2012-09-18 21:15:02
【问题描述】:

编辑:已解决,重复: Prevent timezone conversion on deserialization of DateTime value


我在尝试反序列化 2000 年 9 月 30 日时遇到了一个奇怪的错误。

2000-09-30T00:00:00+11:00 将日期变为 29/09/2000 11:00:00 PM。

如何防止它在转换中损失一天:

public class Data
{
[XmlArray("Times")]
[XmlArrayItem("Time")]
public List<DateTime> Times { get; set; }

 public void Test()
 {
    XmlReader xr = XmlReader.Create(new StringReader(@"<Data><Times><Time>2000-09-30T00:00:00+11:00</Time><Time>1900-01-01T06:00:00</Time></Times></Data>"));
    XmlSerializer ser = new XmlSerializer(typeof(Data));
    Data data = (Data)ser.Deserialize(xr);
    // hover over data and see date is the 29th
 }
}

【问题讨论】:

    标签: c# datetime xml-deserialization


    【解决方案1】:

    此日期的 XML 表示适用于 UTC +11 时区,请参阅http://www.timeanddate.com/time/map/

    因此,当 UTC +11 时区 30 日午夜 12 点时,悉尼 (UTC + 10) 29 日晚上 11 点 :-)

    【讨论】:

    • 我更改了 TimeZone 后为什么仍然存在同样的问题?
    • 更改时区后是否重新启动了 Visual Studio?
    • +1 不,我没有。我刚刚用这个解决方案克服了这个问题:stackoverflow.com/questions/3188933/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多