从日期字符串中的月/日表示形式中删除前导零

本文关键字:删除 表示 字符串 日期 | 更新日期: 2023-09-27 18:28:39

在我的应用程序中,我正试图为搜索日期的用户微调搜索功能。之前,我在输入的搜索条件和DB列之间进行了直接的.ToUpper()比较。DB中的所有Date值都只保存Date本身(我在INSERT/UPDATE之前对字段使用CHECK约束来去掉不需要的Time)。

因此,我的数据库中的值被保存(例如)"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#在没有指定时间的情况下将默认值"12:00:00 AM"添加到任何DateTime值中,作为开发人员,我知道这必须包括在内,搜索才能在日期字段中正常工作。

为了让用户更简单,我希望他们能够输入(例如)"5/25/25/2013"或"05/25/2013"并获得相同的结果,所以我添加了TrimStart('0')人口:

// 7/1/2005 => 07/01/2005
m.DATE_FIELD.ToString().ToUpper() == searchCriteria.TrimStart('0').ToUpper()+" 12:00:00 AM"

这现在可以成功地让用户输入(例如)"7/25/2013"或"07/25/2013",但是,如果DB中的值为(例如)"7/1/2005",则会导致字符串比较的搜索条件为"7/01/2005",这不匹配并导致搜索失败。

如何修剪Month值的前导0和Day值的前导零(如果存在)?

从日期字符串中的月/日表示形式中删除前导零

如果您确信用户输入的日期是有效的,并且您在进行比较之前正在验证,那么您可以简单地使用以下

m.DATE_FIELD.Date == Convert.ToDateTime(searchCriteria).Date

你可以用M代替MM,或者用d代替dd,但老实说,hvd在问题中的评论是正确的——你不应该比较字符串。您应该将字符串输入转换为DateTime,然后根据DateTime进行比较,后者没有自己的特定格式

除了前导零之外,还要考虑日期表示方式随区域设置而变化(d/M/yyyyM/d/yyyyyyyy-MM-dd),并且只有yyyy-MM-dd格式在字符串形式时才可排序。

也许这和Kishore建议的是一样的。。。如果是,请原谅。

也就是说,如果你解析了用户的文本,如果它失败了,那么它会自动为假,如果它成功了,那么你可以比较日期:

DateTime searchDate;
if (DateTime.TryParse(searchCriteria, out searchDate))
{
    if (m.DATE_FIELD.Date == searchDate.Date)
        // Do something amazing
}