如何获得开始和结束日期之间的持续时间

时间:2013-02-01 13:53:59

标签: c# .net

  

可能重复:
  Converting Days into Human Readable Duration Text
  How do I calculate difference in years and months given a start and end

我使用(结束日期 - 开始日期).TotalDays它返回总天数。例如,145天

但我不想要完整的日子。

可以将145天转换为3个月和25天这样的事情。

6 个答案:

答案 0 :(得分:4)

比起初看起来有点难......

我想你可以做这样的事情,它具有计算实际日历月数的优势,而不是估计数月为30天或类似。

var now = DateTime.Now;
var future = DateTime.Now.AddDays(new Random().NextDouble() * 365);
//dates above for example only

var xx = Enumerable.Range(0,int.MaxValue)
        .Select(i => new{numMonths = i, date = now.AddMonths(i)})
        .TakeWhile(x => x.date < future)
        .Last();
var remainingDays = (future - xx.date).TotalDays;
Console.WriteLine("{0} months and {1} days",xx.numMonths,remainingDays);

答案 1 :(得分:1)

如果您假设一个月为30天,则以下内容可能有所帮助。

var start = DateTime.Today;

var end = DateTime.Today.AddDays(99);

var timeSpan = end.Subtract(start);

var months = (int)timeSpan.TotalDays / 30;

var days = timeSpan.TotalDays % 30;

var str = string.Format("{0} months, {1} days", months, days);

答案 2 :(得分:0)

要克服一个月内的问题天数,请查看年份和月份

DateTime d1 = New DateTime(2002, 1, 1);
DateTime d2 = New DateTime(2000, 10, 1);
int years = Math.Abs((d1.Year - d2.Year));
int months = ((years  * 12)  + Math.Abs((d1.Month - d2.Month)));

答案 3 :(得分:0)

两个DateTime对象的差异导致TimeSpan个对象。由于月份跨越一个月的时间在几个月内不一致,TimeSpan对象如何表示几个月?

为了计算两个日期之间的月数,您需要提前知道开始日期和结束日期,以便计算实际的月数(记住闰年等)它们。

答案 4 :(得分:0)

如果你想要年,月,日:

  1. 年=您可以从结束日期减去的最大年数,以便结果仍然是&gt;开始日期。
  2. 月份=您可以从上一个结果中减去的最大月数,这样结果仍然是>开始日期。
  3. 天数=上一个结果与开始日期之间的天数。

答案 5 :(得分:-3)

尝试将时间跨度用于字符串...