2010-02-24 293 views
29

我一直在想很多方法来计算两个日期之间的天数,我的意思是计算整个日子。什么,我需要一个例子:两个日期之间的天差

START DATE   END DATE   Day Count 

24/02/2010 16:26  24/02/2010 16:26   1 
20/02/2010 18:16  24/02/2010 16:26   5 
31/12/2009 20:00  24/02/2010 16:26   56 
15/07/2009 20:59  24/02/2010 16:26   225 
+3

您还没有接受一个答案。您尚未发布您尝试过的内容。我们有第三次罢工吗? – 2010-02-24 23:00:45

回答

51

可以减去DateTime以获得TimeSpan。 TimeSpan的总天数是天数(包括小数天数)。

int DaysBetween(DateTime d1, DateTime d2) { 
    TimeSpan span = d2.Subtract(d1); 
    return (int)span.TotalDays; 
} 

注意时间跨度签名。如果d1 = 1/9/11且d2 = 1/11/11,则d1.subtract(d2)= -2天的时间范围。所以,如果你想使用的时间跨度,以找出是否日期是在彼此的X天,你需要采取的总天数的绝对值...

Math.Abs(span.TotalDays) 
+0

我在VB.NET溶液: 昏暗TS作为时间跨度 TS = s.Subtract(DateTime.Parse(H)) 昏暗天作为整数 天= ts.TotalDays + 1 – 2010-02-24 23:09:56

15

您可以使用的DateTime的两个实例subtraction operator(或DateTimeOffset,因为它具有相同的subtraction operator,并且它是recommended structure to use for date values in .NET)获得TimeSpan实例。

一旦你有了,你可以拨打Days property来得到TimeSpan代表的整个天数。

如果您想要计算整天和小数天数,请查看TotalDays property

在特定情况下,似乎要1添加到任何值Days属性返回,作为您的自定义计算表明,两个DateTime实例表示相同的值,结果为1

9
DateTime dtOne; 
DateTime dtTwo; 

// to get the total days in between 
int answer = (dtTwo - dtOne).TotalDays 
+6

'TimeSpan.TotalDays'返回一个双,所以你需要在那里转换到'int'。 – ChrisF 2010-02-24 23:04:52

+1

其实,如果你想int作为返回类型,你可以使用TimeSpan.Days – makoshichi 2014-05-23 19:12:16