为什么我收到此错误System.FormatException:'字符串未被识别为有效的DateTime。'?

时间:2019-05-24 12:16:40

标签: c# .net datetime casting

告诉我如何纠正错误。

我正在尝试将字符串转换为正确的格式,但是对我来说不起作用。

Text = "9/21/2004"

 DateTime d1 = DateTime.ParseExact(text.ToString(), "MM/dd/yyyy", null);
 return (T)Convert.ChangeType(text, underlyingType);

完整方法:

public static T To<T>(this object text)
        {
            if (text == null) return default(T);
            if (text.Equals(DBNull.Value)) return default(T);
            if (text is string) if (string.IsNullOrWhiteSpace(text as string)) return default(T);

            var type = typeof(T);
            if(type.ToString() == "QuantLib.Date")
            {
                var dt = (DateTime)text;
                QuantLib.Date date = new QuantLib.Date((int)dt.ToOADate());
                return (T)Convert.ChangeType(date, type);
            }

            var underlyingType = Nullable.GetUnderlyingType(type) ?? type;

            DateTime d1 = DateTime.ParseExact(text.ToString(), "dd/MM/yyyy", null);
            return (T)Convert.ChangeType(d1, underlyingType);
        }

        public static T ToDatetime<T>(this QuantLib.Date date)
        {
            DateTime dt = Convert.ToDateTime(date.month() + " " + date.dayOfMonth().ToString() + ", " + date.year().ToString());
            var type = typeof(T);
            if (type == typeof(string))
                return (T)Convert.ChangeType(dt.ToShortDateString(), typeof(T));
            else
                return (T)Convert.ChangeType(dt, typeof(T));
        }

1 个答案:

答案 0 :(得分:0)

MM/dd/yyyy不是“ 9/21/2004”的正确格式,M/dd/yyyy是正确的格式,因为您只给出了一个数字( M ),在日期( dd )之前。我建议您看看@elgonzo在评论中提供的official documentation。如果您在月份中使用两位数字,则M/dd/yyyy仍然有效,例如“ 2004年12月21日”。