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

前端之家收集整理的这篇文章主要介绍了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; 然后解决了. 很好.

猜你在找的XML相关文章