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

Det*_*ium 5 c# datetime json

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

来自JS的JSON日期

hourRegistration.Date = "12/08/2015";
Run Code Online (Sandbox Code Playgroud)

所以 dd/MM/yyyy

我试图像这样解析:

Date = DateTime.ParseExact(hourRegistration.Date, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

整个方法

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();
    }
Run Code Online (Sandbox Code Playgroud)

截图 在此输入图像描述

ToCharArray()

在此输入图像描述

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

Aak*_*shM 3

你的字符串值hourRegistration.Date不是你想象的那样。

对于 .NET 中的字符串,存在许多 Unicode 字符,这些字符要么根本不出现在调试表示中,要么实际上不是它们显示的字符。在您的情况下,如ToCharArray调试扩展所示,您的字符串实际上包含许多U+200EUnicode 字符“从左到右标记”(U+200E)字符。

这些在调试表示中是不可见的,但在尝试解析日期时是相关的。我不知道他们是如何到达那里的,也不知道他们为什么在那里——这是你需要进一步研究的事情。

要解决您眼前的问题,在解析日期之前,请从字符串中删除所有非 ASCII 字符,如下所示:

var actualDateString = new String(hourRegistration.Date
                          .ToCharArray()
                          .Where(c => c <= 255)
                          .ToArray()
                       );
Run Code Online (Sandbox Code Playgroud)

(我刚刚把它敲出来,所以它不是很漂亮)

那么你应该能够根据actualDateString需要进行解析。