25

開始日と終了日がいつ指定されたか、2 つの日付の間の月と年を取得する方法を知りたいです。

例:Start Date: '1/1/2011'(mm/dd/yyyy)End date :'11/30/2011'. 取得する月と年はJanuary,2011; February,2011; March,2011; and so on till November,2011

4

5 に答える 5

57

どうぞ

public static IEnumerable<(string Month, int Year)> MonthsBetween(
        DateTime startDate,
        DateTime endDate)
{
    DateTime iterator;
    DateTime limit;

    if (endDate > startDate)
    {
        iterator = new DateTime(startDate.Year, startDate.Month, 1);
        limit = endDate;
    }
    else
    {
        iterator = new DateTime(endDate.Year, endDate.Month, 1);
        limit = startDate;
    }

    var dateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat;
    while (iterator <= limit)
    {
        yield return (
            dateTimeFormat.GetMonthName(iterator.Month), 
            iterator.Year
        );

       iterator = iterator.AddMonths(1);
    }
}

そして明らかにあなたはそれをこのように呼びます

var startDate = DateTime.ParseExact("01/01/2011", "MM/dd/yyyy");
var endDate = DateTime.ParseExact("11/30/2011", "MM/dd/yyyy");

var months = MonthsBetween(startDate, endDate);

結果は次のようになります

{
    {  "January", 2011  },
    {  "February", 2011  },
    {  "March", 2011  },
    {  "April", 2011  },
    {  "May", 2011  },
    {  "June", 2011  },
    {  "July", 2011  },
    {  "August", 2011  },
    {  "September", 2011  },
    {  "October", 2011  },
    {  "November", 2011  },
}

月の名前はあなたの文化に依存していますが、それはまさにあなたが求めていたものだと思いますよね?

于 2012-08-13T08:38:31.233 に答える
24

開始日が終了日以下の while ループから始めることができます

その中で、開始日から関連する月と年の部分を引き出して保存し(おそらく具体的なクラスまたは a として)、次を使用して開始日を1か月増やしますAddMonths(1)

//something on these lines 
while(startdate <= enddate)
{
// pull out month and year
startdate = startdate.AddMonths(1);
}
于 2012-08-13T08:41:14.913 に答える
4

次の式を使用します。

((date1.Year - date2.Year) * 12) + date1.Month - date2.Month

そして、月数を取得します。

これを適切な方法で使用すると、クラックされます。

Stackoverflow へようこそ。ここでハードワークはあなたの役割であり、問​​題が発生したときに友愛が行うための考え方を示します。

于 2012-08-13T08:30:23.920 に答える