c#DateTime转换错误-字符串未被识别为有效的DateTime

c#DateTime转换错误-字符串未被识别为有效的DateTime,c#,.net,C#,.net,我在尝试将字符串转换为DateTime时不断遇到错误 Error: String was not recognized as a valid DateTime. 我试图转换的字符串是从数据表中获取的。奇怪的是,如果我只使用日期本身并将其放入字符串中,就不会有错误。只有当我从表中获取日期时,才会出现错误 这就是给我带来麻烦的日期:2008-04-20T07:00:00Z 这是我的密码: string dateString = "2008-04-20T07:00:00Z"; foreach (D

我在尝试将字符串转换为DateTime时不断遇到错误

Error:
String was not recognized as a valid DateTime.
我试图转换的字符串是从数据表中获取的。奇怪的是,如果我只使用日期本身并将其放入字符串中,就不会有错误。只有当我从表中获取日期时,才会出现错误

这就是给我带来麻烦的日期:2008-04-20T07:00:00Z

这是我的密码:

string dateString = "2008-04-20T07:00:00Z";

foreach (DataRow dr in tblData.Rows)
{
        string tblDate = dr["DOCUMENTDATE"].ToString();
        string format = "yyyy-MM-ddTHH:mm:ssZ";

        DateTime convertDate = DateTime.ParseExact(tblDate, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
        //DateTime convertDate = DateTime.Parse(dateString);
        dr["DOCUMENTDATE"] = convertDate.ToString();
    }
我查阅了其他帖子,尝试了Parse、ParseExact、Convert.ToDateTime,但仍然得到相同的错误

编辑1:

dr[“DOCUMENTDATE”]的数据类型是字符串。 填充表格的数据是从转换为xml的json中获取的。然后我使用XMLtoDataTable


我做错了什么?

来,试试这个。我认为问题在于您没有提供可识别的格式:

相关小提琴:

编辑

从文件中:

DateTime.ParseExact(字符串, 一串 提供程序, 日期时间样式) 方法解析日期的字符串表示形式,该日期必须在 由format参数定义的格式


如果我使用上面的datestring示例,我不会得到任何错误。您的日期在调试器中看起来可能是正确的,但我不认为它的格式与您指定的格式完全匹配。

您是否在调试器中查看了tblDate。显而易见的结论是,它不包含您认为它包含的内容,因此在这里显示表中的示例数据。我也检查了这一点。tblDate DOCUMENTDATE的输出是正确的值(即2008-04-20T07:00:00Z)是的,我同意如果您有一个datetime数据类型,则数据库不会接受该值,除非他将其设置为varchar。请看第二个@RK_AUS'点,我会查看
tblDate.ToCharArray()的结果
在调试器中,并仔细检查是否没有其他不明显的意外空白/不可打印字符<如果传递的字符串包含未指示允许的空白(通过
datetimestyle.AllowWhiteSpaces
和类似值),则code>ParseExact将引发该异常。您甚至可以检查ASCII值,确保所有字符都是您认为的字符(例如,连字符真的是连字符还是?)。这里的问题是他只是试图将该示例字符串转换为日期时间。dr[“DOCUMENTDATE”]与测试值dateString=“2008-04-20T07:00:00Z”格式不同。这对我不适用。它不允许ToString()的“format”参数。
    string format = "yyyy-MM-ddTHH:mm:ssZ";
    string tblDate = dr["DOCUMENTDATE"].ToString(format);


    DateTime convertDate = DateTime.ParseExact(tblDate, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
    dr["DOCUMENTDATE"] = convertDate.ToString(format);