【问题标题】:Cannot implicitly convert type 'string' to 'System.DateTime'无法将类型“字符串”隐式转换为“System.DateTime”
【发布时间】:2011-05-28 17:54:18
【问题描述】:

我正在尝试从字符串转换为 DataTime,但出现错误。 我正在使用 VS 2003,.NET Framework 1.1

DateTime dt = Convert.ToDateTime("11/23/2010");
string s2 = dt.ToString("dd-MM-yyyy");
DateTime dtnew = Convert.ToString(s2);

无法将类型“字符串”隐式转换为“System.DateTime”

谁能帮我解决这个错误的语法。

【问题讨论】:

  • 强烈建议您至少切换到.NET 2.0。您将需要 VS 2005+。但是你可以使用免费的 VS 2010,它总比 VS 2003 好!

标签: c# datetime


【解决方案1】:
string input = "21-12-2010"; // dd-MM-yyyy    
DateTime d;
if (DateTime.TryParseExact(input, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out d))
{
    // use d
}

【讨论】:

    【解决方案2】:

    我猜你打错了 - 将 Convert.ToString(s2) 更改为 Convert.ToDateTime(s2)

    【讨论】:

    • 我收到一个异常 mscorlib.dll 中发生了“System.FormatException”类型的未处理异常附加信息:字符串未被识别为有效的 DateTime。
    • 从 Convert.ToString(s2) 更改为 Convert.ToDateTime(s2) 时
    • 你最好试试 DateTime.Parse()。这将免除一些错误。似乎 Convert() 在 2010 年 11 月 23 日哭泣,它认为 23 是一个月。
    • @prince23,那是因为您尝试从不符合系统文化的日期字符串进行转换。您应该在这里使用 DateTime.ParseExact 方法,其中第二个参数将是输入字符串的格式。
    【解决方案3】:
    DateTime dtnew = Convert.ToString(s2);
    

    问题是您将string s2 再次转换为字符串并将其存储在DateTime variable

    试试这个:

    DateTime dt = Convert.ToDateTime("11/23/2010");
    string  s2 = dt.ToString("dd-MM-yyyy");
    DateTime dtnew = Convert.ToDateTime(s2);
    

    【讨论】:

      【解决方案4】:

      您应该使用DateTime.ParseDateTime.ParseExact

      DateTime dt= DateTime.Parse("11/23/2010");
      string  s2=dt.ToString("dd-MM-yyyy");
      DateTime dtnew = DateTime.Parse(s2);
      

      两者都有TryXXX变体,需要传入一个out参数,但如果解析失败不会抛出异常:

      DateTime dt;
      if(td = DateTime.TryParse("11/23/2010", out td))
      {
        string  s2=dt.ToString("dd-MM-yyyy");
        DateTime dtnew = DateTime.Parse(s2);
      }
      

      【讨论】:

      • 1. dt = new DataTime; 2.dt = DateTime.Parse;总计:多余的实例化
      【解决方案5】:

      如果您需要指定格式,请尝试DateTime.Parse(...)DateTime.ParseExact(...)

      【讨论】:

        【解决方案6】:

        DateTime.Parse("01/01 2010"); 或使用 DateTime.TryParse 如果您不确定它每次都会转换,即。并不总是一个日期,但有时是空白的。

        【讨论】:

          【解决方案7】:

          这对我有用。

          DateTimeConverter c = new DateTimeConverter();
          DateTime dt = (DateTime)c.ConvertFromString("2012-05-10");
          

          DateTime dt2 = (DateTime)TypeDescriptor.GetConverter(dt).ConvertFrom("2012-05-21");
          

          【讨论】:

            【解决方案8】:

            需要将双引号("")改为单引号(''

            【讨论】:

              猜你喜欢
              • 2023-03-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-01-18
              • 1970-01-01
              相关资源
              最近更新 更多