2

我想做的如下

给定两个日期,例如 1998 年 3 月 2 日和 2011 年 9 月 25 日。如何将间隔拆分为

  1. 1998年3月2日至1998年3月31日(30天)
  2. 1998 年 4 月 1 日至 1998 年 12 月 31 日(9 个月)
  3. 1999 年 1 月 1 日至 2010 年 12 月 31 日(11 年)
  4. 2011 年 1 月 1 日至 2011 年 8 月 31 日(8 个月)
  5. 2011 年 9 月 1 日至 2011 年 9 月 25 日(30 天)

    但是,如果任何间隔不存在,我们不想强制包含它,即结果不会总是天/月/年/月/天,例如

    给定开始日期 = '1998-02-01' 和结束日期 = '2011-03-31',预期结果是(月/年/月)

    1998-02-01 ==> 1998-12-31 1999-01-01 ==> 2010-12-31 2011-01-01 ==> 2011-03-31

    给定开始日期 = '1998-02-01' 和结束日期 = '1998-03-31',预期结果是(2 个月)

    1998-02-01 ==> 2011-03-31

    给定开始日期 = '1998-01-05' 和结束日期 = '1998-02-03',预期结果是(天/天)
    1998-01-05 ==> 2011-01-31 1998-02-01 ==> 2011-02-03

如果我的描述没有意义,请查看以下内容。我正在尝试完成相同但在.net

在任意时间范围内找到最佳日/月/年间隔的算法?

4

1 回答 1

1

你可以这样做:

DateTime startDate = new DateTime(1998, 3, 2);
DateTime endDate = new DateTime(2011, 9, 25);

DateTime firstMonth = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(1);
DateTime firstYear = new DateTime(startDate.Year + 1, 1, 1);
DateTime lastYear = new DateTime(endDate.Year, 1, 1);
DateTime lastMonth = new DateTime(endDate.Year, endDate.Month, 1);

Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", startDate, firstMonth.AddDays(-1));
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", firstMonth, firstYear.AddDays(-1));
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", firstYear, lastYear.AddDays(-1));
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", lastYear, lastMonth.AddDays(-1));
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", lastMonth, endDate);

输出:

1998-03-02 - 1998-03-31
1998-04-01 - 1998-12-31
1999-01-01 - 2010-12-31
2011-01-01 - 2011-08-31
2011-09-01 - 2011-09-25
于 2012-04-18T07:55:44.040 回答