C# 如何在数据集C中导出/导入DateTime#
我有两个应用程序,第一个将数据集导出到文件,第二个将该文件读取到数据集。这两个应用程序都将CultureInfo设置为“en US”,以及DataSet。区域设置为“en US” 在第一个应用程序中,我有DateTime字段:C# 如何在数据集C中导出/导入DateTime#,c#,asp.net,asp.net-mvc,datetime,C#,Asp.net,Asp.net Mvc,Datetime,我有两个应用程序,第一个将数据集导出到文件,第二个将该文件读取到数据集。这两个应用程序都将CultureInfo设置为“en US”,以及DataSet。区域设置为“en US” 在第一个应用程序中,我有DateTime字段: dt.Columns.Add("DateCreated", typeof(DateTime)); 然后写入文件: ds.WriteXml(fileName); 在第二个应用程序中: ds.ReadXml(reader); 当我尝试从DataRow读取Date
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时引发了该异常。当我指定使用模式保存数据集时,它也不会转换
此字段中的日期值格式为:“2017-06-11T08:10:06.221239 03:00”
为什么会发生这种情况?是否可以在不指定DateFormat字符串的情况下将其转换为DateTime?谢谢大家! 如果未在时区偏移部分中使用正号或负号,UTC日期字符串格式似乎不正确,并将抛出
FormatException
,给出消息字符串未被识别为有效的日期时间
:
2017-06-11T08:10:06.2212339 03:00
^
missing sign offset here
如果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
上的输出字符串应如下所示(以UTC为单位):
注意:在DataRow
输入的情况下,可能使用Object
参数而不是string
,因此如果dr[“DateCreated”]
的值肯定不为空,则此代码可能适用:
DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"].ToString().Insert((date.Length - 6), "+"));
解析示例:
相关问题:
显示整个方法的代码。还向我们显示发生异常的屏幕截图,以便我们可以看到其他上下文。该值看起来不正确-它应该有一个
+
或-
符号,而不是9
和0
之间的空格(03:00
是UTC的偏移量),因此它抛出了一个FormatException,但消息是什么?在任何情况下,@StephenMuecke都是正确的,该错误会引发FormatException,并显示“字符串未被识别为有效的日期时间”。验证起来很简单。我试着用一个数据集和一个数据表来复制这个问题,并对一个MemoryStream进行写入和读取。“Convert.ToDateTime(dr[“DateCreated”])引发了类型为“System.FormatException”的异常”
DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"].ToString().Insert((date.Length - 6), "+"));