DateTime.ParseExact:"字符串未被识别为有效的DateTime"

时间:2015-08-14 06:48:33

标签: c# json datetime

我试图从javascript应用程序发送JSON请求,并在我的SQL DB中创建此对象(HourRegistration),但出于某种原因,我无法将日期从json解析为有效的DateTime。

JS的JSON日期

hourRegistration.Date = "12/08/2015";

所以dd/MM/yyyy

我试图像这样解析:

Date = DateTime.ParseExact(hourRegistration.Date, "dd/MM/yyyy", CultureInfo.InvariantCulture)

整个方法

public void CreateHours(HourRegistrationDTO hourRegistration)
    {
        DAO.Instance.HourRegistration.Add(new HourRegistration()
        {
            Date = DateTime.ParseExact(hourRegistration.Date, "dd/MM/yyyy", CultureInfo.InvariantCulture),
            Cust_ID = hourRegistration.Cust_id,
            Login_ID = hourRegistration.Login_id,
            Hours = hourRegistration.Hours,
            Comment = hourRegistration.Comment
        });
        DAO.Instance.SaveChanges();
    }

截图 enter image description here

ToCharArray()

enter image description here

我真的不知道为什么这不起作用。据我所知,这应该有用吗?

3 个答案:

答案 0 :(得分:1)

这没有错误:

DateTime date = DateTime.ParseExact("12/08/2015", "dd/MM/yyyy", CultureInfo.InvariantCulture);

,所以问题必须在其他地方。

我必须假设你的hourRegistration.Date变量是空字符串。在这种情况下,您将获得例外"String was not recognized as a valid DateTime." 在解析之前调试该值。

修改

根据你的评论,给我们这样的屏幕截图是没有问题的:

enter image description here

只是为了确定并澄清问题范围...... 谢谢!

编辑2

这听起来很奇怪:

尝试重命名您的string媒体资源,看看它是否正在解决问题。 在名为string

Date对象上查看以下行为

enter image description here

有人可以告诉我为什么在调试器中处理为DateTime对象?它显然是string变量。

更新:此问题已在此处详细说明:String variable name Date acts weird in debugger

答案 1 :(得分:0)

目前很明显你的字符串还有其他一些字符。您可以尝试使用这样的简单自定义方法删除此字符:

    static string Validate(string dirty)
    {
        string validChars = @"0123456789/-\."; string newStr = "";
        for (int i = 0; i < dirty.Length; i++)
            if (validChars.IndexOf(dirty[i]) > -1) newStr += dirty[i];
        return newStr;
    }

并使用它:

Date = DateTime.ParseExact(Validate(hourRegistration.Date), "dd/MM/yyyy", CultureInfo.InvariantCulture)

答案 2 :(得分:-1)

请尝试:

Date = DateTime.Parse(hourRegistration.Date, CultureInfo.GetCultureInfo("ru-Ru"));