首页 > 解决方案 > C# 解析 DateTime 无法将字符串转换为 DateTime

问题描述

我按照我的日期变量的字符串输出,按照格式解析,还是遇到了格式异常。

我可以知道我应该改变什么吗?

string DOB = retrieved.Entities[i].GetAttributeValue<AliasedValue>("Contact.birthdate").Value.ToString();
//output: 4/13/2018 12:00:00AM

DateTime DOB_formatted = DateTime.ParseExact(DOB, "MM/dd/yyyy", null);
//System.FormatException

解决方案:将对象转换为日期时间

DateTime DOB_formatted = Convert.ToDateTime(retrieved.Entities[i].GetAttributeValue<AliasedValue>("Contact.birthdate").Value);

标签: c#datetimeparsingxrm

解决方案


ParseExact()需要完美匹配。MM/dd/yyyy格式字符串需要,04/13/2018但值为4/13/2018 12:00:00AM。您想要M/d/yyyy hh:mm:sstt,并且您应该确认日值没有前导零。如果您不能相信数据源是一致的,那么还有一个采用格式字符串数组的重载。

最后,根据评论,编译时类型ValueObject. 但是运行时呢?运行时类型仍然很有可能已经是一个DateTime值,您需要做的就是强制转换它。由于国际化/文化问题,转换为字符串然后重新解析回 DateTime 非常昂贵。避免这些转换将为计算机节省大量工作,并真正提高性能。


推荐阅读