在我的应用程序中,我试图为搜索日期的用户微调搜索功能。之前我在输入的搜索条件和DB列之间进行了直接.ToUpper()
比较。我的数据库中的所有日期值都只保存DATE本身(我在INSERT / UPDATE之前的字段上使用CHECK约束去掉了不需要的时间)。
因此,我的数据库中的值被保存(例如)“7/1/2005”,“6/14/2006”,“10/1/2008”。因为C#只有一个DateTime数据类型,所以在我的搜索过程中必须进行一些字符串操作以确保比较正确的字符串。例如,DB中的值[7/1/2005]将在string.Format("{0:MM/dd/yyyy}", o.DateFiled)
之后作为“07/01/2005”出现。然后,由于C#在没有指定时间的情况下将任何DateTime值添加默认值“12:00:00 AM”,我作为开发人员知道必须包含此内容才能使搜索在日期字段上正常运行。
为了让用户更简单,我希望他们能够输入(例如)“5/25/2013”或“05/25/2013”并得到相同的结果,所以我添加了{{1操纵:
TrimStart('0')
现在成功让用户输入(例如)“7/25/2013”或“07/25/2013”,但是如果数据库中的值是(例如)“7/1/2005”,这导致搜索条件为“7/01/2005进行字符串比较,但不匹配并导致搜索失败。
如何修剪Month值的前导0和Day值的前导零(如果存在)?
答案 0 :(得分:1)
如果您确定用户输入的是有效日期,并且您在此比较之前验证了那么您可以简单地使用以下
m.DATE_FIELD.Date == Convert.ToDateTime(searchCriteria).Date
答案 1 :(得分:1)
您可以使用M
代替MM
,或d
代替dd
,但老实说hvd's comment in the question是正确的 - 您不应该比较字符串。您应该从字符串输入转换为DateTime
,然后根据DateTime
进行比较,而没有自己的特定格式。
除了前导零之外,还要考虑日期表示因区域而异(d/M/yyyy
vs M/d/yyyy
vs yyyy-MM-dd
),并且只有yyyy-MM-dd
格式可以排序以字符串形式。
答案 2 :(得分:0)
也许这与Kishore建议的一样......如果是这样,请原谅。
那就是说,如果您解析了用户的文本,如果它失败了,那么它会自动为假,如果成功,那么您可以比较日期:
DateTime searchDate;
if (DateTime.TryParse(searchCriteria, out searchDate))
{
if (m.DATE_FIELD.Date == searchDate.Date)
// Do something amazing
}