2

私がやりたいことは次のとおりです

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 に答える