我正在尝试将值传递给dateTime对象,但是当月份小于month10时出现问题

时间:2019-04-09 15:27:25

标签: c#

我试图传递到datatime对象(日期,月份和年份),但是当值小于月份10时,打印月份出现问题。 在我的代码中,我有一个初始日期,并且通过算术运算,我计算出干净月份和通知月份。另外,如果月份的最后一天是30或31,并且具体情况是第2个月,我也会做些什么。

这是我的代码:

    int day = (int)DateTime.Now.Day;
    int month = (int)DateTime.Now.Month;
    int year = (int)DateTime.Now.Year;

    int diaLimpeza, mesLimpeza, anoLimpeza;
    int diaNotifica, mesNotifica, anoNotifica;

  public void mes6()
    {
        DateTime dataInicial = new DateTime();
        DateTime dataLimpeza = new DateTime();
        DateTime dataNotifica = new DateTime();

        day = 31;
        month = 12;
        year = 2019;

        mesLimpeza=  month + 6;
        if (mesLimpeza > 12)
        {
            mesLimpeza = mesLimpeza - 12;
            anoLimpeza = year + 1;
            diaLimpeza = day;

        }
        else
        {
            mesLimpeza = month + 6;
            anoLimpeza = year;
            diaLimpeza = day;
        }

        int soma = diaLimpeza + 2;

        diaNotifica = soma;

        if (mesLimpeza == 01 || mesLimpeza == 03 || mesLimpeza == 05 || mesLimpeza == 07 || mesLimpeza == 08 || mesLimpeza == 10) //mesLimpeza == 12 excepçao
        {
            if (diaLimpeza == 30 || diaLimpeza == 31)
            {
                diaNotifica = diaNotifica - 31;
                mesNotifica = mesLimpeza + 1;
                anoNotifica = anoLimpeza;
                //int a = diaNotifica;
            }

            else if ((diaLimpeza == 30 || diaLimpeza == 31) && mesLimpeza == 12)
            {
                diaNotifica = diaNotifica - 31;
                mesNotifica = (mesLimpeza + 1) - 12;
                anoNotifica = anoLimpeza + 1;
            }
            else
            {
                diaNotifica = diaLimpeza + 2;
                mesNotifica = mesLimpeza;
                anoNotifica = anoLimpeza;
            }
        }
        else if (mesLimpeza == 04 || mesLimpeza == 06 || mesLimpeza == 09 || mesLimpeza == 11)
        {
            if (diaLimpeza == 29 || diaLimpeza == 30)
            {
                diaNotifica = diaLimpeza - 30;
                mesNotifica = mesLimpeza + 1;
                anoNotifica = anoLimpeza;
            }
            else
            {
                diaNotifica = diaLimpeza + 2;
                mesNotifica = mesLimpeza;
                anoNotifica = anoLimpeza;
            }
        }
        else if (mesLimpeza == 02)
        {
            if (anoLimpeza % 4 == 0)
            {
                if (diaLimpeza == 28 || diaLimpeza == 29)
                {
                    diaNotifica = diaLimpeza - 29;
                    mesNotifica = mesLimpeza + 1;
                    anoNotifica = anoLimpeza;
                }
            }
            else
            {
                if (diaLimpeza == 27 || diaLimpeza == 28)
                {
                    diaNotifica = diaLimpeza - 28;
                    mesNotifica = mesLimpeza + 1;
                    anoNotifica = anoLimpeza;
                }
                else
                {
                    diaNotifica = diaLimpeza + 2;
                    mesNotifica = mesLimpeza;
                    anoNotifica = anoLimpeza;
                }
            }
        }

        dataLimpeza = new DateTime(anoLimpeza, mesLimpeza, diaLimpeza);

        textBoxData.Text = dataLimpeza.ToShortDateString();

    }

在最后一行,我试图在文本框中显示日期格式,例如(yyyy-MM-dd)。

当月的结果等于或大于10时,我已经模拟了一个初始日,月和年,并且一切都很好。

当值较小时,我在图像上收到此错误:

My error

我已经注意到,月份格式不接受小于零且不为零的数字,例如月份“ 6”,我必须输入“ 06”以使其成为正确的格式。

我该如何解决这个问题?

我正在Visual Studio中使用C#。

3 个答案:

答案 0 :(得分:2)

您似乎在用困难的方式做事:

textBoxData.Text = (new DateTime(year, month, day).AddMonths(6).AddDays(2)).ToShortDateString();

应该可以解决问题。

让对象为您执行日期算术。

答案 1 :(得分:0)

您的最终日期无效,您正在创建一个月= 6(六月)且日期= 31的日期。 但是六月没有一天31。我添加了一行代码

if (diaLimpeza > 30) diaLimpeza--;

else if (mesLimpeza == 04 || mesLimpeza == 06 || mesLimpeza == 09 || mesLimpeza == 11)之后至零天。

enter image description here

答案 2 :(得分:0)

使用此代码,当用户在组合框中选择6个月时,我将计算初学者日期,清除日期和通知日期。我也看看这一年是否是Le年。在测试的第二个月要小心。如果不是is年,而您在第29天进行测试,则会报错,因为当year是a年时,第29天并不存在。

    int day = (int)DateTime.Now.Day;
    int month = (int)DateTime.Now.Month;
    int year = (int)DateTime.Now.Year;

    int diaLimpeza, mesLimpeza, anoLimpeza,diaNotifica, mesNotifica, anoNotifica;

  public void mes6()
  {
        DateTime dataInicial = new DateTime();
        DateTime dataLimpeza = new DateTime();
        DateTime dataNotifica = new DateTime();

        day = 28;
        month = 02;
        year = 2018;

        mesLimpeza=  month + 6;
        if (mesLimpeza > 12)
        {
            mesLimpeza = mesLimpeza - 12;
            anoLimpeza = year + 1;
            diaLimpeza = day;

        }
        else
        {
            mesLimpeza = month + 6;
            anoLimpeza = year;
            diaLimpeza = day;
        }

        if (mesLimpeza == 01 || mesLimpeza == 03 || mesLimpeza == 05 || mesLimpeza == 07 || mesLimpeza == 08 || mesLimpeza == 10 || mesLimpeza == 12) //mesLimpeza == 12 excepçao
        {
            if (diaLimpeza == 30 || diaLimpeza == 31)
            {
                diaNotifica = (diaLimpeza + 2) - 31;
                mesNotifica = mesLimpeza + 1;
                anoNotifica = anoLimpeza;
            }

            else if ((diaLimpeza == 30 || diaLimpeza == 31) && mesLimpeza == 12)
            {
                diaNotifica = (diaLimpeza + 2)-31;
                mesNotifica = mesLimpeza + 1;
                anoNotifica = anoLimpeza + 1;
            }
            else
            {
                diaNotifica = diaLimpeza + 2;
                mesNotifica = mesLimpeza;
                anoNotifica = anoLimpeza;
            }
        }
        else if (mesLimpeza == 04 || mesLimpeza == 06 || mesLimpeza == 09 || mesLimpeza == 11)
        {
            if (diaLimpeza > 30)
            {
                diaLimpeza = 30;
            }
            if (diaLimpeza == 29 || diaLimpeza == 30)
            {
                diaNotifica = (diaLimpeza + 2) - 30; //mudei esta linha
                mesNotifica = mesLimpeza + 1;
                anoNotifica = anoLimpeza;
            }
            else
            {
                diaNotifica = diaLimpeza + 2;
                mesNotifica = mesLimpeza;
                anoNotifica = anoLimpeza;
            }
        }
        else if (mesLimpeza == 02)
        {
            if (anoLimpeza % 4 == 0)
            {
                if (diaLimpeza == 30 || diaLimpeza == 31)
                {
                    diaLimpeza = 29;

                    if (diaLimpeza == 28 || diaLimpeza == 29)
                    {
                        diaNotifica = (diaLimpeza + 2) - 29;
                        mesNotifica = mesLimpeza + 1;
                        anoNotifica = anoLimpeza;
                    }
                } 
            }
            else
            {
                if (diaLimpeza >= 28 && diaLimpeza <= 31)
                {
                    diaLimpeza = 28;

                    if (diaLimpeza == 27 || diaLimpeza == 28)
                    {
                        diaNotifica = (diaLimpeza + 2) - 28;
                        mesNotifica = mesLimpeza + 1;
                        anoNotifica = anoLimpeza;
                    }
                }
                else
                {
                    diaNotifica = diaLimpeza + 2;
                    mesNotifica = mesLimpeza;
                    anoNotifica = anoLimpeza;
                }
            }
        }
        dataInicial = new DateTime(year, month, day);
        dataLimpeza = new DateTime(anoLimpeza,mesLimpeza, diaLimpeza);
        dataNotifica = new DateTime(anoNotifica, mesNotifica, diaNotifica);

        textBoxData.Text = dataInicial.ToShortDateString() + "\r\n" + dataLimpeza.ToShortDateString() + "\r\n" + dataNotifica.ToShortDateString();

    }

 private void guardaStock_Click(object sender, EventArgs e)
    {
        if (comboLimpeza.Text == "6 Meses")
        {
            mes6();
        }
    }