C#中的DateCompare与SQL中的类似

C#中的DateCompare与SQL中的类似,c#,.net,sql,datetime,C#,.net,Sql,Datetime,C#中是否有一种方法可以比较SQLDateDiff方法之类的日期,包括时间部分参数 例如,我有两个日期: DateTime early = "2013.02.01 07:31:15"; DateTime soon = "2013.02.01 23:48:35"; if (Compare(early, soon, DAY) == true) { //I want to be here } public static bool YearMonthDayHourDateCompare(Dat

C#中是否有一种方法可以比较SQL
DateDiff
方法之类的日期,包括时间部分参数

例如,我有两个日期:

DateTime early = "2013.02.01 07:31:15";
DateTime soon = "2013.02.01 23:48:35";

if (Compare(early, soon, DAY) == true)
{
   //I want to be here
}
public static bool YearMonthDayHourDateCompare(DateTime one, DateTime two)
{
    return (one.Year  == two.Year  &&
            one.Month == two.Month &&
            one.Day   == two.Day   &&
            one.Hour  == two.Hour  && 
            ...);
}
我想知道这两个物体的年、月、日是相等的;其余的对我来说并不重要。

你可以用这个方法找出差异

System.TimeSpan diff1 = date2.Subtract(date1);
编辑

如果要比较相等,只需使用相等运算符==

if(date1 == date2)
{
}
您可以使用
DateTime
s的属性来获取日期部分

在您的情况下,您可以使用:

if (early.Date == soon.Date)
{
    ....
}

您可以使用
DateTime.Date

if(early.Date == soon.Date)
{
} 
如果您想要小时的准确度:

if(early.Date == soon.Date && early.Hour == soon.Hour)
{
} 
但是,使用此解决方案,您将获得“12/03/1857 23:59”!="13/03/1857 00:00". 如果要检查他们的“距离”:


if(early.Substract(soon).Duration()如果你想明确说明你是如何比较两个日期的,我认为稍微罗嗦一点没有什么错:

DateTime early = "2013.02.01 07:31:15";
DateTime soon = "2013.02.01 23:48:35";

if (Compare(early, soon, DAY) == true)
{
   //I want to be here
}
public static bool YearMonthDayHourDateCompare(DateTime one, DateTime two)
{
    return (one.Year  == two.Year  &&
            one.Month == two.Month &&
            one.Day   == two.Day   &&
            one.Hour  == two.Hour  && 
            ...);
}
以描述比较的方式命名方法。更好的是,这可以是一个扩展方法:

public static bool CompareDateAndHour(this DateTime one, DateTime two)
{
    return (one.Date == two.Date &&
            one.Hour == two.Hour && 
            ...);
}
可以像这样使用:

bool datesAreEqual = soon.CompareDateAndHour(two);

要将两个日期进行精确的小时比较,请使用以下方法:

bool match = (soon - early).TotalHours < *your diff limit*;
bool match=(很快-很早)。总小时数<*您的差异限制*;

如果您想知道是否是同一天,则不能使用日期差

请尝试以下代码:

if(new TimeSpan(early.Ticks).TotalDays() == new TimeSpan(soon.Ticks).TotalDays()){
     // Equal
}

您可以使用Microsoft.VisualBasic添加
,并使用VB.NET程序集进行比较..有些关联:您听说过
Kiss方法
保持简单愚蠢
这里有一个简单的解决方案
如果(String.Format(“{0:ddmmyyyyhmmss}”,early)=String.Format(“{0:ddmmyyyyyyhmmss}”,很快)){//success}
@DJKRAZE:该解决方案会带来文化、性能方面的问题,并不像提供的其他一些解决方案那样简单。是的,您是对的:)但是如果我想比较DateTime与小时的准确性?@Bruno.cf:
Date
Day
是不同的。Bruno.cf你需要查看
Date
如果月份不同,那么日期就不相等。因此你的评论是
0
sense@AshBurlaczenko
我想知道这两个对象的大小相等年、月、日;其余的对我来说都不重要。
。这句话的哪一部分让你得出了这个解决方案是错误的结论?对于
DateTime
来说,加减运算符重载,返回
TimeSpan
,因此
date2-date1
将是一个等效的选择。+1表示明确的好事情。但请原谅我…“直言不讳没什么错”然后你把它隐藏在
MyCustomDateComparer
?;)@J.Steen:好吧,函数的名称很臭——这只是一个例子。也许示例代码最好不要包装在函数中。你同意吗?我在这里不是太认真,尽管我仍然一直主张方法和变量都有描述性名称。在这篇文章中在一个冗长的案例中,在我看来,一个描述性的方法名称比完全不包装条件要好。=)哎哟,是的,到了极点。=)根本没有冒犯的意思。@J.Steen:说得好。我应该更小心使用示例代码。