月份在月份列表中出现两次

时间:2016-06-22 20:36:03

标签: c# asp.net .net datetime

我试图让我的网站输出一年中所有月份的列表,但我遇到了一个我无法弄清楚的瓶颈。出于某种原因,10月在列表中出现两次,4月甚至没有出现,这样(名字是丹麦语,但你可以理解它):

目前我通过foreach循环获得了所有这些月份。 Måneder只是我之前在页面上创建的列表。看起来出于某种原因,当它达到第十位时,它会以某种奇怪的方式进行添加,而不仅仅是覆盖,使其成为第16顺序而不是第10顺位:

foreach (int l in Måneder)
{
    DateTime bleh = DateTime.Now.AddMonths(l);
    string blah = (bleh.ToString("MMMM"));
    Literal4.Text += blah + l + "<br/>";
}

2 个答案:

答案 0 :(得分:2)

问题是填充Måneder的循环:

for (int t = 1; t <= 12; t++)
{
    int months = int.Parse(DateTime.Now.Month.ToString(t.ToString())); // <-- BUG
    Måneder.Add(months);
}

此循环获取当前月份(如果您今天运行它,则为6月6)并在该数字上调用ToString十二次,将循环变量t作为格式字符串传递:

6.ToString("1") ==> 1
6.ToString("2") ==> 2
6.ToString("3") ==> 3
6.ToString("4") ==> 4
6.ToString("5") ==> 5
6.ToString("6") ==> 6
6.ToString("7") ==> 7
6.ToString("8") ==> 8
6.ToString("9") ==> 9
6.ToString("10") ==> 16
6.ToString("11") ==> 11
6.ToString("12") ==> 12

请注意,6.ToString("10")会返回16。正如Custom Numeric Format Strings中所述,格式字符串中的0实际上是格式化值中数字的占位符 - 在这种情况下的值为6.其他数字<{1}}到1格式字符串中没有特殊含义。

为什么这个循环使用9呢?要构建1到12之间的数字列表,只需致电DateTime.Now.Month

Måneder.Add(t)

您也可以完全删除列表:

for (int t = 1; t <= 12; t++)
{
    Måneder.Add(t);
}

答案 1 :(得分:1)

+运算符执行整数加法和字符串连接。你的问题可能是它做错了。

试试这个:

foreach (int l in Måneder)
        {
            DateTime bleh = DateTime.Now.AddMonths(l);
            string blah = (bleh.ToString("MMMM"));
           Literal4.Text += blah +  l.ToString() + "<br/>";

        }