微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DataSet 读写xml 之后 时间格式多了时区的问题

故事是这样,我的XML头部,有这样一个字段,datatime,


<xs:schema id="PkgDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="PkgDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Table" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" minOccurs="0"/>
<xs:element name="SubFileCreateDate" type="xs:dateTime" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

然后我用D

DataSet dataSet =null;


dataSet = new DataSet();
dataSet.readxml(m_strUpdataInfoPath);


treeList1.DataSource = dataSet.Tables["Table"].defaultview;

然后我保存之后,

dataSet.WriteXml("e:\\tmp.xml");


情况变成这样:


多了+08:00


显然是时区的问题,然后到网上找了好多文章,这还是个相当不好处理的问题.


大意是这样:

dataSet = new DataSet();

此时的dataSet的locate = "zh-CN"

可是,执行完

dataSet.readxml(m_strUpdataInfoPath);

之后,变成:en-US


然后,这个贴子里说得清楚:

http://stackoverflow.com/questions/427439/dataset-locale-what-it-does

Sounds like a kNown TimeZone issue: changing DataSet.Locale won't help.


我改了locate

dataSet = new DataSet();
dataSet.readxml(m_strUpdataInfoPath);

//System.Globalization.CultureInfo usCult = new System.Globalization.CultureInfo("zh-CN");//en-US
//dataSet.Locale = usCult;


果然没有用.


所以,问题应该是出在xml的序列器上.

这个序列器,认为那个xml是个美国人做的. 这就不好办了.

当然,网上有人自己写序列器,这个太难了,我也不会.


所以,从上面的stack overflow的贴子里找到提示,这样处理:

dataSet.Tables[0].Columns["SubFileCreateDate"].DateTimeMode = DataSetDateTime.Unspecified; 然后解决了. 很好.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。