我正在尝试编制自己的日历。 但是现在我对闰年有些问题。 我不能解析2月29日到日期时间。每次我想运行我的代码时,我都会收到错误“字符串未被识别为有效的日期时间”。
如果我想解析2月29日,我只会得到错误,其他每个日期都可以。
以下是发生错误的代码的一小部分:
string day = date.Text;
string year = DateTime.Now.Year.ToString();
string month = tbMonat.Text;
string stringDate = day + "." + month + "." + year;
DateTime dt = Convert.ToDateTime(stringDate);
有谁知道,为什么我会收到此错误,以及我如何解决它?
修改
这是代码,我如何计算它是否是闰年。
case "Februar":
int aktuellesjahr = Int32.Parse(cbJahr.Text);
if((aktuellesjahr % 4 == 0 && aktuellesjahr % 100 != 0) || aktuellesjahr % 400 == 0)
{
days = 29;
}
else
{
days = 28;
}
break;
答案 0 :(得分:2)
你有内置函数DateTime.IsLeapYear
可以在这里使用。
尝试这样的事情:
string day = date.Text;
string year = DateTime.Now.Year.ToString();
string month = tbMonat.Text;
if (!DateTime.IsLeapYear(year()) && day == 29 && month == 2)
{
MessageBox.Show("this is not leap year, please enter correct date"):
}
else
{
string stringDate = day + "." + month + "." + year;
DateTime dt = Convert.ToDateTime(stringDate);
//better to use like this, but you need to convert strings to ints
//DateTime dt = new DateTime(year, month, day);
//rest of your code...
}
编辑:由于您的代码容易出现许多异常(如果用户每天输入32或“a”或......),最好有一些方法来检查数据在将其转换为日期时间之前。像这样:
private bool IsValidDate(string day, string month, string year)
{
int i;
//check if all those values for date/month/year can be converted to number
if (!int.TryParse(day, out i) || !int.TryParse(day, out i) || !int.TryParse(day, out i))
return false;
//now check if date, written in format dd.MM.yyyy can be converted to DateTime.
DateTime dt;
string stringDate = day.PadLeft(2, '0') + "." + month.PadLeft(2, '0') + "." + year;
return DateTime.TryParseExact(stringDate, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt);
}
用法如下:
if (!IsValidDate(day, month, year))
{
MessageBox.Show("invalid data entered");
}
答案 1 :(得分:2)
你不需要检查闰年。 只需使用:
DateTime.DaysInMonth(year, month); // return number days of a month.
然后
if(days > DateTime.DaysInMonth(year, month))
days = DateTime.DaysInMonth(year, month) // or show an error message