如何在DataSet C#中导出/导入DateTime

时间:2017-06-11 07:33:19

标签: c# asp.net asp.net-mvc datetime

我有两个应用程序,第一个将DataSet导出到文件,第二个将该文件读取到DataSet。这两个应用程序都将CultureInfo设置为" en-US"以及DataSet.Locale是" en-US"。

在第一个应用程序中,我有DateTime字段:

dt.Columns.Add("DateCreated", typeof(DateTime));

而不是写入文件:

ds.WriteXml(fileName);

在第二个应用中:

    ds.ReadXml(reader);

当我尝试从DataRow读取DateTime字段时:

DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"]);

它引发了异常:

' Convert.ToDateTime(DR [" dateCreated会"])'抛出类型' System.FormatException'与演员相同,或者当我指定CultureInfo时。当我指定使用Schema保存DataSet时,它也不会转换。

此字段中的日期值格式为:" 2017-06-11T08:10:06.2212339 03:00"

为什么会发生这种情况,是否可以在不指定DateFormat字符串的情况下将其转换为DateTime?谢谢!

1 个答案:

答案 0 :(得分:0)

如果不在时区偏移部分使用正号或负号,则UTC日期字符串格式似乎不正确,并且会在给定消息DataRow下抛出String date = (dr["DateCreated"] ?? String.Empty).ToString(); if (!String.IsNullOrEmpty(date)) { date = date.Insert((date.Length - 5), "+"); // NB: Convert.ToDateTime will give same value as DateTime.ParseExact here DateTime? dateCreated = DateTime.ParseExact(date, "yyyy-MM-ddTHH:mm:ss.FFFFFFF zzzz", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); }

date

如果dateCreated给出的日期格式固定为正时间偏移并且您只想读取它们,请使用String.Insert在偏移部分之前插入偏移符号,如下所示:

date: 2017-06-11T08:10:06.2212339 +03:00

dateCreated: 6/11/2017 5:10:06 AM

Object&上的输出字符串string应该是这样的(以UTC为基础):

DataRow

注意:Convert.ToDateTime可能会在dr["DateCreated"]输入的情况下使用DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"].ToString().Insert((date.Length - 6), "+")); 参数而不是{{1}},因此如果{{1}}肯定没有&#,此代码可能适用39; t有空值:

{{1}}

解析示例:.NET Fiddle Demo

相关问题:

Custom DateTime formats when using DataSet.WriteXml in .NET

Reading XML into Datatable gives incorrect DateTime when the time has Time Zone info