c# - 日期时间.ParseExact : "String not recognised as a valid DateTime"

标签 c# json datetime

我正在尝试从 javascript 应用程序发送 JSON 请求,并在我的 SQL 数据库中创建此对象 (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

我真的不知道为什么这行不通。据我记得,这应该行得通吗?

最佳答案

hourRegistration.Date 中的字符串值不是您认为的那样。

对于 .NET 中的字符串,有许多 Unicode 字符根本没有出现在调试表示中,或者实际上并不是它们看起来的字符。在您的情况下,如 ToCharArray 调试扩展所示,您的字符串实际上包含许多 U+200E Unicode Character 'LEFT-TO-RIGHT MARK' (U+200E)字符。

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

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

var actualDateString = new String(hourRegistration.Date
                          .ToCharArray()
                          .Where(c => c <= 255)
                          .ToArray()
                       );

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

然后您应该能够根据需要解析 actualDateString

关于c# - 日期时间.ParseExact : "String not recognised as a valid DateTime",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003910/

相关文章:

c# - Blazor 组件 : notify of collection-changed event causing thread collisions

c# - 正则表达式可以去除什么,例如字符串左边的 "note:"和 "firstName: "?

c# - 将 BindingNavigator 与以编程方式创建的 Datagridview 连接起来

json - 取消具有可变数量的相似字段的 JSON 对象

json - postman 测试 - 只断言设置键 :value pairs in an object, 没有意外返回

java - com.owlike.genson.JsonBindingException : Could not deserialize to type class com. sun.jersey.api.representation.Form

javascript - 从客户端向服务器发送日期

c# - 你如何计算字符串的像素大小?

c# - 对于某些文化,解析包含毫秒的 DateTime 失败。为什么?

python - 强制 SOAP 水使用朴素的日期时间