如何在C#中比较没有时间部分的日期时间[重复]

Posted

技术标签:

【中文标题】如何在C#中比较没有时间部分的日期时间[重复]【英文标题】:How to compare date time without time portion in C# [duplicate] 【发布时间】:2016-07-02 10:58:42 【问题描述】:

我尝试过这种方式,但出现错误。这是我的代码。

protected override ValidationResult IsValid(object value, ValidationContext validationContext)

    DateTime _dateJoin = DateTime.ParseExact(value.ToString(), "MM/dd/yyyy", null);
    DateTime _CurDate = DateTime.ParseExact(DateTime.Now.ToString(), "MM/dd/yyyy", null);

    int cmp = _dateJoin.CompareTo(_CurDate);
    if (cmp > 0)
    
        return ValidationResult.Success;
    
    else if (cmp < 0)
    
        return new ValidationResult(ErrorMessage);
    
    else
    
        return ValidationResult.Success;
    

值变量也有有效的日期和时间部分。谢谢

【问题讨论】:

你在那里做什么?为什么要将日期时间从DateTime.Now 转换为字符串,然后再转换回DateTime?只需使用DateTime.Today DateTime _CurDate = DateTime.Today 会比解析 Now 来剥离时间更简单。您也可以使用 value.Date 仅返回日期部分。 ***.com/a/683051/1693085 这一行给出错误DateTime _dateJoin = DateTime.ParseExact(value.ToString(), "MM/dd/yyyy", null); 它是一个 json(字符串)值还是实际上是 DateTime?后者可以直接转换为 DateTime。 DateTime _dateJoin = (DateTime)value; 更好的是删除参数类型 object 并使其成为 DateTime? 并在执行大于测试之前检查它是否为空。 【参考方案1】:

您只需比较DateTime.TodayDateTime.Date

if(_dateJoin.Date > DateTime.Today)

    // ...

else

    // ...

更新

object 值的日期类似于 Date = 03-16-2016 12:00:00 AM 时 执行这一行

DateTime _dateJoin =   DateTime.ParseExact(value.ToString(), "MM/dd/yyyy", null);

然后我收到错误,例如 String 未被识别为有效的 DateTime。 ——

这是一个不同的问题,您必须使用正确的格式提供程序:

DateTime _dateJoin = DateTime.Parse(value.ToString(), CultureInfo.InvariantCulture);

ParseExact(在这种情况下不需要):

DateTime _dateJoin = DateTime.ParseExact(value.ToString(), "MM-dd-yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

【讨论】:

是的,我以前做过,但没用。 执行此行时,对象值的日期类似于 Date = 03-16-2016 12:00:00 AM DateTime _dateJoin = DateTime.ParseExact(value.ToString(), "MM/dd/ yyyy", null);然后出现类似 String 的错误未被识别为有效的 DateTime。 我想在比较时从两个日期变量中排除时间部分。如何实现它。 @Thomas:如果您当前的文化不使用 AM/PM 指示符,则可以使其与过载一起工作。查看我的更新。 @Thomas:我已经展示了如何排除时间部分,只需使用 DateTime.TodayDateTime.Date【参考方案2】:

只比较日期部分:

int cmp = _dateJoin.Date.CompareTo(_CurDate.Date);

【讨论】:

以上是关于如何在C#中比较没有时间部分的日期时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Nullable-如何在 C# 中的 DateTime 类型中仅比较没有时间的日期?

如何在c#中将字符串转换为日期[重复]

如何在 C# 中将字符串转换为日期时间 [重复]

C#比较日期时间和当前日期时间[关闭]

如何仅比较 cosmos db 中的日期部分

基于时区在 C# 中设置日期时间,例如 +08:00 [重复]