2013-02-01 203 views
1

可能重复:
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天这样的事情。

+4

如何定义“月”?那么2月份呢? – SLaks

+0

是的,我无法弄清楚这个问题。我不知道如何定义月份。 – aratn0n

+1

@SLaks - 我想你会将它定义为日历月份,例如“从开始日期到结束日期跨越的月份障碍数量,-1如果开始日期的月份日期>结束日期的月份日期。 – mbeckish

回答

-3

尝试使用的时间跨度来串...

+3

这根本没有帮助。 – SLaks

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))); 
+0

问题是关于几个月/天。这没有帮助... – GolfWolf

+0

同意,时间跨度不会给你#月的任何东西 – Peter

0

两个DateTime对象结果的差异在TimeSpan对象中。由于跨月的时间在几个月内不一致,因此TimeSpan对象如何用几个月来表示?

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

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); 
0

如果你想年,月,日:

  1. 年=最大数年,你可以从结束日期这样的结果仍然是减去>开始日期。
  2. Months =您可以从前一个结果中减去的最大月数,以便结果仍然>开始日期。
  3. 天=上一个结果与开始日期之间的天数。
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); 
+0

很好的回答!作品! – scartag

+0

我刚刚意识到如果未来<现在,事情就会出错。不过你明白了。 – spender

+0

为了使用LINQ表达式而不是'while'循环:-) – fero

相关问题