C#DateTime.ParseExact给出“该字符串未被识别为有效的DateTime值。”

时间:2019-01-01 01:05:54

标签: c# datetime parsing tryparse

我尝试调试,并说“字符串是/未被识别为有效的DateTime值”,我在本网站上找到了大约20条与此有关的帖子,并尝试了其中的每一项,都没有任何不同,或者它给了额外的错误“ 0无效值”。我究竟做错了什么?因为它不显示任何错误,但是每次都会停止调试并给出错误。

dToday2和cExpiration我想从字符串转换为DateTime值,然后在代码的底行进行比较。

请注意,cExpiration来自textBox9.text,它是来自已保存文件的直接readAllText流,因此我希望它将已保存的文件解析为DateTime。

            string cheatExpiration = System.IO.File.ReadAllText(@"C:\xWQcixf07xES5yf5V5A6\UKI9nRuJgZA611zQCyIq.txt");
            DateTime dateToday = DateTime.Today;
            string dateToday2 = DateTime.Today.ToString();
            textBox8.Text = dateToday2;

            textBox9.Text = cheatExpiration;
            DateTime cExpiration = DateTime.ParseExact(textBox9.Text, "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
            DateTime dToday2 = DateTime.ParseExact(dateToday2, "yyyy/MM/dd HH:mm", CultureInfo.InvariantCulture);

            if (dToday2 < cExpiration)
            {

            }

我希望它能够解析textBox9.text,例如2019/01/17 01:01,但我不知道,因为我什至没有使用它的工作经验,所以我不确定。

更新

enter image description here

3 个答案:

答案 0 :(得分:2)

您的问题与我们所想的完全一样,您的日期时间不是"yyyy/MM/dd HH:mm"格式,而是 IS "yyyy/MM/dd HH:mm\r\n"

那么我们该如何解决呢?我们可以使用String.Trim方法,该方法将删除字符串中的所有空格或回车符

DateTime cExpiration = DateTime.ParseExact(cheatExpiration.Trim(), "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);

答案 1 :(得分:0)

您需要缩小有效输入和无效输入之间的问题。例如,这里的输入可以正常工作:

<svg id="robot" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ...>
<script xlink:href="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js" />
<!-- grafic content -->
<script>
var s = Snap("#robot");
//...
</script>
</svg>

首先,添加更多您自己的代码,直到代码破裂为止,然后准确缩小导致其破裂的更改范围。

答案 2 :(得分:0)

通过将今天的日期转换为字符串,然后尝试再次将其转换回DateTime,您将面临其他解析错误。这是因为调用ToString()将在不同的区域和/或区域性中产生不同的输出。相反,只需直接比较DateTime.Today:

UserCtrl