1

可能重复:
将天数转换为人类可读的持续时间文本
如何计算给定开始和结束时间的年月差

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

但我不想要总天数。

可以将 145 天转换为 3 个月和 25 天,如下所示。

4

6 回答 6

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);
于 2013-02-01T14:13:25.070 回答
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);
于 2013-02-01T13:58:27.753 回答
0

如果你想要年、月、日:

  1. 年 = 您可以从结束日期中减去的最大年数,使得结果仍然 > 开始日期。
  2. 月 = 您可以从之前的结果中减去的最大月数,使得结果仍然 > 开始日期。
  3. 天数 = 先前结果与开始日期之间的天数。
于 2013-02-01T14:12:34.013 回答
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)));
于 2013-02-01T13:57:20.907 回答
0

两个DateTime对象的差异导致一个TimeSpan对象。由于一个月所跨越的时间在月份之间是不一致的,那么一个TimeSpan对象如何用几个月来表示呢?

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

于 2013-02-01T13:58:24.930 回答
-3

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

于 2013-02-01T13:56:45.623 回答