Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 减去2个datetime字段以获得剩余天数差_C#_Datetime_Timespan - Fatal编程技术网

C# 减去2个datetime字段以获得剩余天数差

C# 减去2个datetime字段以获得剩余天数差,c#,datetime,timespan,C#,Datetime,Timespan,如果有人能帮我计算出减去2个datetime字段以获得剩余天数差异,我将不胜感激。您应该查看。使用 int numDaysDiff = date2.Subtract(date1).Days; 天数差异 这些答案将天数作为System.TimeSpan结构中的int,它是减去两个System.DateTime字段的结果 快速回答-获取差异天数 int numDaysDiff = date2.Subtract(date1).Days; 备选答案-使用Math.A

如果有人能帮我计算出减去2个datetime字段以获得剩余天数差异,我将不胜感激。

您应该查看。

使用

        int numDaysDiff = date2.Subtract(date1).Days;


天数差异

这些答案将天数作为
System.TimeSpan
结构中的
int
,它是减去两个
System.DateTime
字段的结果

快速回答-获取差异天数

        int numDaysDiff = date2.Subtract(date1).Days;
备选答案-使用Math.Abs确保它不是负数,以防日期可能以任意顺序提供

        int numDaysDiff = Math.Abs( date2.Subtract(date1).Days );
使用系统名称空间来完成它的一些示例数据:

        // sample data
        DateTime date1 = DateTime.Now;
        DateTime date2 = DateTime.Now.AddDays(10);
MSDN参考资料(以及更多示例代码):


    • 使用C#很容易做到这一点为了比较日期时间,我们有一个名为TimeSpan的类。在本例中,TimeSpan结构将定义为两个日期时间之间的差异

      假设您的日期时间称为开始和结束

      DateTime start = new DateTime(2009, 6, 14);
      DateTime end = new DateTime(2009, 12, 14);
      
      我们已确定日期时间为2009年6月14日和2009年12月14日

      现在,让我们找出两者之间的区别。为此,我们创建一个时间跨度:

      TimeSpan difference = end - start;
      
      使用此TimeSpan对象,可以用多种不同的方式表示时间差。但是,您特别要求以天为单位计算差异,因此以下是您如何获得该差异:

      Console.WriteLine("Difference in days: " + difference.Days);
      
      因此,该属性称为TimeSpan.Days


      最终代码 有关使用TimeSpan结构的更多信息,请参见(特别是C#示例)

      希望我能帮忙

      更新:一些答案建议一步完成减法,例如:

      int days = (dt2 - dt1).Days;
      

      然而,它们和我的回答是一样的,只是缩短了。这是因为DateTime.Subtract()方法和DateTimes的减法运算符返回一个TimeSpan,您可以从中访问天数。在我的代码示例中,我特别使用了较长的方法,以便您清楚地了解DateTime和TimeSpan对象之间发生了什么以及它们是如何工作的。当然,我刚才提到的其他方法也不错

      更新#2:

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

      正如另一个问题的主要答案所示,您可以使用以下代码:

      int days = (int)Math.Ceiling(difference.TotalDays);
      
      此代码使用Math.天花板,根据MSDN,它是:

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

      你想如何计算天数? 因此,我们现在遇到了一个问题,即如何计算天数。是否将一天中的一部分(例如.5天)计算为:

      • 一整天-这将使用Math.天花对TimeSpan.TotalDays进行取整,以便计算开始的天数
      • 一天中的一部分时间-您只需返回TimeSpan.TotalDays(不四舍五入)作为小数(在双精度数据类型中)
      • 什么都不做-您可以忽略一天中的这部分时间,只返回TimeSpan.Days
      以下是上述各项的代码示例:

      计算为一整天(使用Math.天花()进行四舍五入):

      将计数作为一天的一部分(不使用Math.天花板(),而是将小数形式保留为一天的一部分):

      不算一天的天数(四舍五入为完整天数):


      最简单的解决方法是利用TimeSpan()。 此减法函数将返回两个日期在时间跨度方面的差值。现在,您可以获取诸如天、月等字段来访问您可以使用的天 下面是示例代码

      Net代码

          Dim tsTimeSpan As TimeSpan
          Dim ldDate1 as Date
          Dim ldDate2 as Date
            'Initialize date variables here
             tsTimeSpan = ldDate1 .Subtract(ldDate2)
             Dim NumberOfDays as integer = tsTimeSpan.days
      
          DateTime lDate1;
          DateTime lDate2;
          TimeSpan tsTimeSpan ;
          int NumberOfDays;
            //Initialize date variables here
            tsTimeSpan = ldDate1 .Subtract(ldDate2);
            NumberOfDays = tsTimeSpan.days;
      
      C#.Net代码

          Dim tsTimeSpan As TimeSpan
          Dim ldDate1 as Date
          Dim ldDate2 as Date
            'Initialize date variables here
             tsTimeSpan = ldDate1 .Subtract(ldDate2)
             Dim NumberOfDays as integer = tsTimeSpan.days
      
          DateTime lDate1;
          DateTime lDate2;
          TimeSpan tsTimeSpan ;
          int NumberOfDays;
            //Initialize date variables here
            tsTimeSpan = ldDate1 .Subtract(ldDate2);
            NumberOfDays = tsTimeSpan.days;
      
      显然,您可能希望在以下场景中使用此功能:

    • 在到期前14天发送通知电子邮件
    • 在到期14天后发送另一封通知电子邮件

    • 您需要一个可能为负值的差值

      来获得忽略时间段的确切天数

          DateTime d1 = Convert.ToDateTime(DateTime.Now.ToShortDateString());
          DateTime d2 = Convert.ToDateTime(DateTime.Now.AddDays(46).ToShortDateString());
      
          var days = Convert.ToInt32(d2.Subtract(d1).TotalDays)
      

      @PRR我反对用LMGTFY来处理这些问题。相关:@OP请接受您的答案。正如所提到的,您的计算有一个隐含的模式,即不算一天(四舍五入为完整天数)的答案<代码>整数天=(整数)差分.TotalDays您仍然可以使用
      数学
      进行四舍五入<代码>整数天=(整数)数学下限(差分.总天数)@Pantelis:如果我得到difference.TotalDays=1.782323,那么这个(int)Math.Floor(difference.TotalDays);四舍五入到1????
      //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.
      
          Dim tsTimeSpan As TimeSpan
          Dim ldDate1 as Date
          Dim ldDate2 as Date
            'Initialize date variables here
             tsTimeSpan = ldDate1 .Subtract(ldDate2)
             Dim NumberOfDays as integer = tsTimeSpan.days
      
          DateTime lDate1;
          DateTime lDate2;
          TimeSpan tsTimeSpan ;
          int NumberOfDays;
            //Initialize date variables here
            tsTimeSpan = ldDate1 .Subtract(ldDate2);
            NumberOfDays = tsTimeSpan.days;
      
      DateTime theDate = DateTime.Today;
      int datediff = theDate.Subtract(expiryDate).Negate().Days;
      if expiryDate > theDate then you get Negative value: -14
      expiryDate is less than theDate then you get positive value: 14
      
          DateTime d1 = Convert.ToDateTime(DateTime.Now.ToShortDateString());
          DateTime d2 = Convert.ToDateTime(DateTime.Now.AddDays(46).ToShortDateString());
      
          var days = Convert.ToInt32(d2.Subtract(d1).TotalDays)