Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数据集C中导出/导入DateTime#_C#_Asp.net_Asp.net Mvc_Datetime - Fatal编程技术网

C# 如何在数据集C中导出/导入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

我有两个应用程序,第一个将数据集导出到文件,第二个将该文件读取到数据集。这两个应用程序都将CultureInfo设置为“en US”,以及DataSet。区域设置为“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时引发了该异常。当我指定使用模式保存数据集时,它也不会转换

此字段中的日期值格式为:“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), "+"));