2

指定された日付の月と年を示すメッセージボックスをポップアップしようとしました。たとえば、入力は次のとおりです。

2012 年 7 月および 2013 年 2 月

出力は次のようになります。

2012 年 7 月、2012 年 8 月、2012 年 9 月、2012 年 10 月、2012 年 11 月、2012 年 12 月、2013 年 1 月、2013 年 2 月

私が書いた:

    string datePart1;
    string datePart2;
    string[] date1 = new string[] { "" };
    string[] date2 = new string[] { "" };

    private void button1_Click(object sender, EventArgs e)
    {
        DateTime endDate = new DateTime(2013, 2, 1);  // i will be having the date time as a variable from a textbox
        DateTime begDate = new DateTime(2012, 7, 1);  // i will be having the date time as a variable from a text box

        int year, month;

        if (endDate.Month - begDate.Month < 0)
        {
            month = (endDate.Month - begDate.Month) + 12;
            endDate = new DateTime(endDate.Year - 1, endDate.Month, endDate.Day);
        }
        else
            month = endDate.Month - begDate.Month;

        year = endDate.Year - begDate.Year;

上記のコードは時差を計算しますが、出力しようとしてもうまくいきませんでした。

4

4 に答える 4

2

日付が同じ日であるとは限らないため、このコードを使用して、月の初日のみを考慮する新しい日付を作成できます。

static IEnumerable<string> InclusiveMonths(DateTime start, DateTime end)
{
    // copies to ensure the same day.
    var startMonth = new DateTime(start.Year, start.Month, 1);
    var endMonth = new DateTime(end.Year, end.Month, 1);

    for (var current = startMonth; current <= endMonth; current = current.AddMonths(1))
        yield return current.ToString("M/yyyy");
}

// usage
foreach (var mmyyyy in InclusiveMonths(begDate, endDate))
{
    Console.WriteLine(mmyyyy);
}

var allMonths = string.Join(", ", InclusiveMonths(begDate, endDate));
于 2013-02-14T16:11:04.160 に答える
0

TimeSpan 構造の使用を検討してください。目標をより速く達成するのに役立ちます。

http://msdn.microsoft.com/en-us/library/system.timespan.aspx

于 2013-02-14T16:04:06.837 に答える
0

あなたは使用することができます

TimeSpan dateDifference = endDate - begDate;
year = dateDifference.Days / 365;
month = dateDifference.Days / 30;

編集:TimeSpan機能がない ことを忘れていましたYearまたはMonth、申し訳ありません:(

于 2013-02-14T16:04:07.370 に答える