繁体   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