【问题标题】:C# DateTime.ParseExact gives "The string was not recognized as valid DateTime-value."C# DateTime.ParseExact 给出“字符串未被识别为有效的日期时间值。”
【发布时间】:2019-01-01 01:05:54
【问题描述】:

我尝试调试,它说“字符串是/未被识别为有效的日期时间值”,我在这个网站上找到了大约 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 但我不知道,因为我什至没有使用它的工作经验,所以我不确定。

更新

【问题讨论】:

  • 与您之前的问题一样,我们需要查看导致错误的输入,最好是minimal reproducible example
  • 错误告诉你到底发生了什么,它无法弄清楚你的日期时间格式。所以现在你需要弄清楚为什么,日期字符串是什么样的?您还没有向我们展示,相信我们这不是 .net 的错误。只是您的cheatExpiration 不是yyyy/MM/dd HH:mm 格式...该文件中到底有什么
  • 它加载的文件是相同的 DateTime 格式。这是文件包含的内容,2032/02/11 03:21
  • 你能不能在DateTime cExpiration =的行上打断点并准确粘贴textBox9.Text的变量是什么,如果你也需要的话,可以截图
  • @TheGeneral link

标签: c# datetime parsing tryparse


【解决方案1】:

你的问题和我们想的完全一样,你的日期时间不是"yyyy/MM/dd HH:mm"的格式,它 "yyyy/MM/dd HH:mm\r\n"

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

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

【讨论】:

    【解决方案2】:

    您需要缩小有效输入和无效输入之间的问题范围。例如,下面是可以正常工作的输入:

    var dt = DateTime.ParseExact("2019/01/17 01:01", "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
    Console.WriteLine("{0}", dt);
    

    从这里开始,添加更多您自己的代码,直到它崩溃,然后准确缩小导致它崩溃的更改。

    【讨论】:

      【解决方案3】:

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

      // this includes the Trim() suggested by the others
      string cheatExpiration = System.IO.File.ReadAllText(@"C:\xWQcixf07xES5yf5V5A6\UKI9nRuJgZA611zQCyIq.txt").Trim();
      DateTime cExpiration = DateTime.ParseExact(cheatExpiration, "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
      if (DateTime.Today < cExpiration)
      {
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多