减去2个日期时间字段以获得剩余天数差异

Job*_*obi 31 c# datetime timespan

如果有人能帮助我减去2个日期时间字段以获得与众不同的日子,我将不胜感激.

Max*_*sky 80

使用C#非常容易.为了比较DateTimes,我们有一个名为TimeSpan的类.在这种情况下,TimeSpan结构将被定义为两个日期时间之间的差异.

假设您的DateTimes称为开始和结束.

DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
Run Code Online (Sandbox Code Playgroud)

我们已将日期时间设定为2009年6月14日和2009年12月14日.

现在,让我们找到两者之间的区别.为此,我们创建了一个TimeSpan:

TimeSpan difference = end - start;
Run Code Online (Sandbox Code Playgroud)

使用此TimeSpan对象,您可以通过多种不同方式表达时间差异.但是,你特意要求天数的差异,所以这是你如何得到它:

Console.WriteLine("Difference in days: " + difference.Days);
Run Code Online (Sandbox Code Playgroud)

因此,该属性称为TimeSpan.Days.


最终守则

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

Console.WriteLine("Difference in days: " + difference.Days); //Extract days, write to Console.
Run Code Online (Sandbox Code Playgroud)

有关使用TimeSpan结构的更多信息,请参阅此MSDN文档(尤其是C#示例).

希望我帮忙!

更新:一些答案建议在一步中进行减法,例如:

int days = (dt2 - dt1).Days;
Run Code Online (Sandbox Code Playgroud)

要么

int numDaysDiff = Math.Abs(date2.Subtract(date1).Days);
Run Code Online (Sandbox Code Playgroud)

但是,它们与我的答案相同,只是缩短了.这是因为DateTime.Subtract()方法和DateTimes的减法运算符返回TimeSpan,然后您可以从中访问天数.我在代码示例中专门使用了较长的方法,以便您清楚地了解 DateTime和TimeSpan对象之间的情况以及它们如何工作.当然,我刚刚提到的其他方法也很好.

更新#2:

之前曾问过一个非常类似的问题,可以在这里找到.然而,这个问题的要点是为什么代码样本(基本上等同于所有答案的代码样本)有时会提供一个休息日的答案.我认为这对这个问题也很重要.

作为另一个问题的主要答案建议,您可以使用此代码:

int days = (int)Math.Ceiling(difference.TotalDays);
Run Code Online (Sandbox Code Playgroud)

此代码使用Math.Ceiling,根据MSDN,它是:

返回大于或等于指定的双精度浮点数的最小整数值.

你想如何计算天数?

因此,我们现在遇到了如何计算日期的问题.你想把一天中的一部分(例如一天的.5)计算为:

  • 一整天 - 这将使用Math.Ceiling来对TimeSpan.TotalDays进行舍入,这样您就可以计算开始日期.
  • 部分时间 - 您可以将TimeSpan.TotalDays(未舍入)作为小数返回(在double数据类型中)
  • 没什么 - 你可以忽略一天中的那一部分而只是返回TimeSpan.Days.

以下是上述代码示例:

算作一整天(使用Math.Ceiling()来舍入):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

int days = (int)Math.Ceiling(difference.TotalDays); //Extract days, counting parts of a day as a full day (rounding up).

Console.WriteLine("Difference in days: " + days); //Write to Console.
Run Code Online (Sandbox Code Playgroud)

计算为一天的一部分(不使用Math.Ceiling(),而是以十进制形式作为一天的一部分):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

double days = difference.TotalDays; //Extract days, counting parts of a day as a part of a day (leaving in decimal form).

Console.WriteLine("Difference in days: " + days); //Write to Console.
Run Code Online (Sandbox Code Playgroud)

算作一天中的任何事情(四舍五入到完整天数):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

int days = difference.TotalDays; //Extract days, counting parts of a day as nothing (rounding down).

Console.WriteLine("Difference in days: " + days); //Write to Console.
Run Code Online (Sandbox Code Playgroud)


rah*_*hul 5

使用

时间跨度

DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;  
Run Code Online (Sandbox Code Playgroud)


Myl*_*les 1

你应该看看TimeSpan