我试图传递到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时,我已经模拟了一个初始日,月和年,并且一切都很好。
当值较小时,我在图像上收到此错误:
我已经注意到,月份格式不接受小于零且不为零的数字,例如月份“ 6”,我必须输入“ 06”以使其成为正确的格式。
我该如何解决这个问题?
我正在Visual Studio中使用C#。
答案 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)
之后至零天。
答案 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();
}
}