【问题标题】:Issue in Converting String to DateTime Format将字符串转换为日期时间格式的问题
【发布时间】:2016-07-27 10:43:42
【问题描述】:

我无法将从 ddl 中提取的字符串值转换为 DateTime 数据类型。

错误信息

在 mscorlib.dll 中出现“System.FormatException”类型的异常 但未在用户代码中处理。附加信息:字符串是 未被识别为有效的日期时间。

我只需要在 SQL 数据库中更新日期。

这是 DataDictionary 的图像,我需要的属性是生日

这些是我当前获取和转换日期时间的代码。

string birth = ddlDay.SelectedItem.Value + "-" + ddlMonth.SelectedItem.Value + "-" + ddlYear.SelectedItem.Value;
DateTime birthDate = DateTime.ParseExact(birth, "dd-MMMM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
objCustomer.birthDate = birthDate;

【问题讨论】:

  • birth 的哪个值对您来说失败了?
  • 我们不知道您的 DropDownLists 显示什么,因此无法提供帮助。
  • 当然,如果您切换到使用某种形式的日期选择器控件而不是单独的下拉列表,它几乎肯定会将所选日期公开为DateTime,然后你就可以避免完全搞乱字符串和格式。
  • 感谢解决!

标签: c# sql datetime type-conversion


【解决方案1】:
string date = "01/08/2008";
DateTime dt = Convert.ToDateTime(date);
Console.WriteLine("Year: {0}, Month: {1}, Day: {2}", dt.Year, dt.Month, dt.Day);

【讨论】:

    【解决方案2】:

    您可以使用 TryParse 代替 ParseExact 以确保安全。即:

    var ddlDaySelectedItemValue = "29";
    var ddlMonthSelectedItemValue = "Feb"; // February, 2, 02
    var ddlYearSelectedItemValue = "2016";
    
    DateTime birthDate;
    string birth = ddlYearSelectedItemValue + " " + ddlMonthSelectedItemValue + " " + ddlDaySelectedItemValue;
    
    if (DateTime.TryParse(birth, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDate))
    {
        objCustomer.birthDate = birthDate;
    }
    

    【讨论】:

      【解决方案3】:

      将您的代码更改为:

      DateTime.ParseExact(birth, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
      

      【讨论】:

      • 这只会在ddlMonth.SelectedItem.Value 是一个两位数的月份数字(而不是完整的月份名称,如目前所写)时修复它
      • 好的。我知道了。 ddlDay.SelectedItem.Value 是数值吗?
      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      相关资源
      最近更新 更多