Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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# 如何在.NET中获取两天之间的差异_C#_.net_Datetime - Fatal编程技术网

C# 如何在.NET中获取两天之间的差异

C# 如何在.NET中获取两天之间的差异,c#,.net,datetime,C#,.net,Datetime,我想查找员工的服务期限,我已经从数据库中获取了员工加入日期,就像这样 离职日期:2007/03/24 现在我需要找出系统日期和加入日期之间的差异,如果有人能对此有所了解,请帮助我,谢谢 我为得到答案而编写的示例代码,但它不能正常工作 public TimeSpan periodOfService { get { //DateOfJoin-->which i get from my database

我想查找员工的服务期限,我已经从数据库中获取了员工加入日期,就像这样

离职日期:2007/03/24

现在我需要找出系统日期和加入日期之间的差异,如果有人能对此有所了解,请帮助我,谢谢

我为得到答案而编写的示例代码,但它不能正常工作

 public TimeSpan periodOfService
       {
           get
           {
                //DateOfJoin-->which i get from my database
               DateTime  JoinDate   = Convert.ToDateTime(DateOfJoin);
               DateTime TodayData =  DateTime.Now;

               TimeSpan servicePeriod = JoinDate - TodayData;

               return servicePeriod;
           }
   }
输出格式->2年3个月

如何在Asp.net MVC 4中执行此操作?

首先,交换日期

您想从
今天的数据中减去
JoinDate
(同时修改拼写和命名约定):

不幸的是,以您喜欢的格式输出这个
TimeSpan
值比您最初想象的要复杂得多,请参阅下面的文章了解如何实现这一点:

我建议您仔细阅读它建议的解决方案,然后研究如何使用该方法:

public DateSpan(DateTime startDate, DateTime endDate)

您可以获得总日差,并将其转换为月份和年份 这里有一个简单的例子

TimeSpan servicePeriod = TodayData - JoinDate;
string result = string.Format("{0} Years, {1} Months, {2} Days", servicePeriod.TotalDays / 365, servicePeriod.TotalDays / 30, servicePeriod.TotalDays);

您可以返回一个非时间跨度的字符串

通常,您将使用
时间跨度
来表示到日期之间的差异,但您需要将差异显示为年和月,这使得
时间跨度
不合适。相反,您可以创建一个类来表示差异:

class DateDifference {

  public DateDifference(Int32 years, Int32 months) {
    Years = years;
    Months = months;
  }

  public Int32 Years { get; private set; }

  public Int32 Months { get; private set; }

}
您可以使用简单的算术计算两个日期之间的差值:

DateDifference GetDateDifference(DateTime first, DateTime second) {
  if (second < first)
    throw new ArgumentOutOfRangeException("second", "The second date cannot occur before the first.");
  var years = second.Year - first.Year;
  var months = second.Month - first.Month;
  if (second.Month < first.Month) {
    years -= 1;
    months += 12;
  }
  return new DateDifference(years, months);
}

这会让你知道这两个日期之间的差异,不管是在未来还是过去。 如果是无效日期,则返回零范围

public TimeSpan periodOfService
{
    get
    {
        DateTime JoinDate;
        if (DateTime.TryParse(DateOfJoin, out JoinDate))
        {
            return DateTime.Now > JoinDate ? DateTime.Now - JoinDate : JoinDate - DateTime.Now;
        }
        return TimeSpan.Zero;
    }
}

您的代码似乎已经为您计算了时间跨度。如果返回的时间跨度不正确,您是否检查了系统日期(从中减去),实际上是吗?他的时间跨度是不正确的,因为日期是错误的。这与MVC有什么关系?+1对于问题OP。到目前为止,你已经明确了自己的目标并展示了自己的尝试,我不确定你为什么会在这里获得否决票。这没有考虑闰年。假设所有年份都有365天。这也会将366天输出为“1年,12个月,366天”,而不是“1年,0个月,1天”。。。
var dateDifference = GetDateDifference(JoinDate, TodayDate);
public TimeSpan periodOfService
{
    get
    {
        DateTime JoinDate;
        if (DateTime.TryParse(DateOfJoin, out JoinDate))
        {
            return DateTime.Now > JoinDate ? DateTime.Now - JoinDate : JoinDate - DateTime.Now;
        }
        return TimeSpan.Zero;
    }
}