gpt4 book ai didi

c# - 在 .NET 中使用 DataSet.WriteXml 时的自定义日期时间格式

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:16 24 4
gpt4 key购买 nike

我遇到了一个问题,我正在将 DataSet 写入具有 DateTime 类型列的 XML,并且我想控制输出格式。

DataSet data = LoadDataSet();
data.Tables[0].Rows[0]["MyDate"] = DateTime.Now;
data.WriteXml(myFile);

默认情况下,XML 中 DateTime 的格式如下所示:

2011-08-02T17:39:00-07:00

我想使用自定义日期格式,或者至少去掉时区信息。

有什么方法可以控制数据集 XML 中 DateTime 列的格式吗?

我的直觉说不,因为我假设这样做是为了促进跨时区数据的转换,但我注意到即使 DateTime 列标记省略时区数据,我也可以成功读取 DataSet XML,所以我希望我写入 XML 时可以做类似的事情。

最佳答案

如果您可以忍受只删除时区信息,则此解决方法可能适合。 DataSet 中 DateTime 列的 DateTimeMode 属性的默认值为 UnspecifiedLocal。您可以明确地将 DateTimeMode 设置为未指定,这意味着时区部分不会被序列化。

例如

您可以使用这样的函数:

    public static void RemoveTimezoneForDataSet(DataSet ds)
{
foreach (DataTable dt in ds.Tables)
{
foreach (DataColumn dc in dt.Columns)
{

if (dc.DataType == typeof(DateTime))
{
dc.DateTimeMode = DataSetDateTime.Unspecified;
}
}
}
}

使用示例:

    DataSet ds = new DataSet();
DataTable dt = new DataTable("t1");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("DT", typeof(DateTime));
dt.Rows.Add(new object[] { 1, new DateTime(2009, 1, 1) });
dt.Rows.Add(new object[] { 2, new DateTime(2010, 12, 23) });

ds.Tables.Add(dt);

ds.WriteXml("c:\\Standard.xml");

RemoveTimezoneForDataSet(ds);

ds.WriteXml("c:\\WithoutTimezone.xml");

输出:

标准.xml:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<t1>
<ID>1</ID>
<DT>2009-01-01T00:00:00+11:00</DT>
</t1>
<t1>
<ID>2</ID>
<DT>2010-12-23T00:00:00+11:00</DT>
</t1>
</NewDataSet>

WithoutTimezone.xml :

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<t1>
<ID>1</ID>
<DT>2009-01-01T00:00:00</DT>
</t1>
<t1>
<ID>2</ID>
<DT>2010-12-23T00:00:00</DT>
</t1>
</NewDataSet>

如果您不喜欢修改原始 DataSet 的 DataColumns 的想法,您可以复制它,然后调用副本上的函数。

关于c# - 在 .NET 中使用 DataSet.WriteXml 时的自定义日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com