故事是这样,我的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; 然后解决了. 很好.