簡體   English   中英

如何按以下順序顯示月份名稱

[英]How to display month names in following sequence

我處於一種情況下,我必須編寫代碼以打印給定時間間隔內涵蓋的所有月份的名稱。 有四種顯示間隔名稱的方法。

(1.)每年(1個周期)

(2.)半年一次(6個周期)

(3.)每季度(3個周期)

(4.)每月(12個周期)

用戶提供3個輸入,一個是開始日期,另一個是周期。 因此,月份名稱顯示必須從用戶選擇的startDate月份開始,並且必須在他輸入的周期中結束,第三個輸入將是checkBoxSelecionStatus,在該位置他將輸入“每月”(12),“每年”(1),“每季度” (3) “每半年”(6)。 因此,此checkBoxSelecionStatus將決定getMonthByDescription()函數中for循環的索引跳過

現在必須是輸出:

(1)當用戶在checkBoxSelecionStatus中選擇“ Monthly”,並且numOfCycles變量具有12值並且startDate為3時(通過startDate = 3表示它從3月1日開始到接下來的12個周期(numOfCycle),即明年3月)。 那么輸出應該是在此間隔內的所有12個月。 所以它的輸出是:

Mar
*****
Apr
*****
May
*****
Jun
*****
Jul
*****
Aug
*****
Sep
*****
Oct
*****
Nov
*****
Dec
*****
Jan
*****
Feb
*****

(2)現在,當用戶在cycle = 12中選擇“ SemiAnually”時,它必須顯示

Mar-Aug
*****
Sept-Feb
*****

(3)現在,當用戶在cycle = 12中選擇“ Quaterly”時,它必須顯示:

Mar-May
*****
Jun-Aug
*****
Sep-Nov
*****
Dec-Feb
***** 

(4)現在,當用戶在12個周期中選擇“每年”時,它必須顯示:

Mar-Feb
*****

用戶可能不輸入int startDate = 3; 每時每刻。 他可以輸入startDate = 1;(此處的月份顯示將從1月的第一個月開始),或者他可以輸入任何startDate,因此代碼必須對所有人有效。

注意:請注意,所需部分在任何情況下都沒有錯。 如果是每季度一次,我必須有3個,因為一年中有4個季度的“ 3”(基於我軟件的其他計算),因此當用戶選擇“季度”時,它必須顯示“ jan-mar" (if start date is first jan) then apr-jun then jul-sep then oct-dec 同樣,對於半年一次的jan-jun then jul-dec

對於那些可能喜歡其他方法的人,這是我的“ Linqified”版本:

void Main()
{
    int period = 1;
    DateTime start = new DateTime(2016, 3, 1);
    var result = Enumerable.Range(0, 12)
        .Select((i, m) => new { index = i, Month = start.AddMonths(m).ToString("MMMM-yyyy")})
        .GroupBy(o => (o.index) / period);

    foreach (var grp in result)
    {
        if (grp.Count() == 1)
        {
            Console.WriteLine(grp.First().Month);
        }
        else
        {
            Console.WriteLine(string.Format("{0} - {1}", grp.First().Month, grp.Last().Month));
        }
        Console.WriteLine("****");
    }

}

只需更改period變量以反映您需要的期間數。 特殊情況是period == 1時,則輸出不是范圍,而是單個月。

編輯:新增年份

這是您改編的代碼。 它只是將當前間隔提前指定的間隔長度。 沒什么特別的:

private static string[] getMonthByDescription(int startMonth, int startYear, int numcycle)
{
    startMonth -= 1; //zero-based index

    int intervalLength = 0;
    switch (checkBoxSelecionStatus)
    {
        case "Monthly": intervalLength = 1; break;
        case "Quarterly": intervalLength = 3; break;
        case "SemiAnually": intervalLength = 6; break;
        case "Yearly": intervalLength = 12; break;
    }
    if (intervalLength == 0)
        throw new ArgumentException();

    int intervals = numcycle / intervalLength;
    string[] arrOfMonthName = new string[intervals];

    for(int i = 0; i < intervals; ++i)
    {
        if (intervalLength > 1)
        {
            var intervalEnd = startMonth + intervalLength - 1;
            var intervalEndYear = startYear;
            if (intervalEnd >= 12)
            {
                intervalEnd -= 12;
                ++intervalEndYear;
            }
            arrOfMonthName[i] = monthNames[startMonth] + " " + startYear + " - " + monthNames[intervalEnd] + " " + intervalEndYear;
        }
        else
            arrOfMonthName[i] = monthNames[startMonth] + " " + startYear;
        startMonth += intervalLength; //go to the next interval
        if (startMonth >= 12)
        {
            startMonth -= 12;
            ++startYear;
        }
    }

    return arrOfMonthName;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM