我正在尝试从 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();
}
ToCharArray()
我真的不知道为什么这行不通。据我记得,这应该行得通吗?
最佳答案
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/