【问题标题】:C# error "String was not recognized as a valid DateTime"C# 错误“字符串未被识别为有效的日期时间”
【发布时间】:2011-12-15 16:17:48
【问题描述】:

我正在尝试将 DateTime.Now 保存为“yyyyMMdd”格式

我有这个代码

string todaysDate = DateTime.Now.ToString();

...

U_Date_of_PD_added = GetDateFromString(todaysDate) 

// U_Date_of_PD_added 是一个日期时间数据库字段

...

//Method to get date from string
private DateTime GetDateFromString(string dateString)
{
   string format = "yyyyMMdd";
   return DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
}

我不断收到错误消息“字符串未被识别为有效的日期时间。”因为它试图解析。有什么问题?

我不在乎它是否节省时间,我更喜欢 00:00:00.000

【问题讨论】:

  • 你能显示dateString的值吗?
  • 为什么要将日期时间转换成字符串?几乎所有现有的数据访问技术都允许您将参数作为正确的数据类型传递,并处理将这些值编组到数据库中,这样您就不必摆弄这种事情了。
  • dateString "26/10/2011 15:02:01"
  • @KinyanjuiKamau:所以这显然在您的第一句话中失败了 - 您没有设法以“yyyyMMdd”格式保存DateTime.Now,并且发生了这个问题在解析之前。

标签: c#


【解决方案1】:

日期转字符串的时候还需要给出格式字符串:

string todaysDate = DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    DateTime.Now.ToString() 生成特定于区域的格式,但它主要包含时间。这种格式称为"General date/time pattern (long time)."

    所以尝试用你的格式字符串解析它会失败,因为你的格式字符串不包含有关时间组件的信息。

    您可以在不提供格式字符串的情况下使用 DateTime.TryParse,或者您还必须在对 DateTime.Now.ToString 的调用中提供格式字符串。

    【讨论】:

      【解决方案3】:

      todaysDate 的值无法使用DateTime.Now.ToString() 转换为DateTime 对象,因为DateTime.Now.ToString() 会生成使用默认日期格式(26-10-2011 14:02:31) 的值。 尝试这样做:string todaysDate = DateTime.Now.ToString("yyyyMMdd");,您应该能够使用您的 GetDateFromString 方法将其转换回来。

      【讨论】:

        【解决方案4】:

        DateTime.Now.ToString("yyyyMMdd") 将返回一个字符串 20110926。

        【讨论】:

          【解决方案5】:
          DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
          

          将为您提供当前日期。请注意,CultureInfo.InvariantCulture 很重要。如果您不信任它,请尝试:

          var r = DateTime.Now.ToString("yyyyMMdd", new CultureInfo("ar-SA")); // 14321128
          var r2 = DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture); // 20111026
          

          【讨论】:

          • +1:“ar-SA”文化信息是一个很好的测试用例,我已经更新了我的答案。
          【解决方案6】:

          首先你得到今天的日期,然后按照下面的方式转换成字符串,你就完成了。

          DateTime today = DateTime.Today.Date;
          string date = today.ToString("yyyy/MM/dd");
          

          【讨论】:

          • 这甚至不是有效的代码(您没有有效的字符串文字)...除非您指定文化,否则您很可能会得到意想不到的结果。另外,发帖时请注意格式。您的代码未显示为代码...
          猜你喜欢
          • 1970-01-01
          • 2012-01-07
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多