将闰年日期转换为DateTime

时间:2017-04-24 08:37:11

标签: c# winforms calendar

我正在尝试编制自己的日历。 但是现在我对闰年有些问题。 我不能解析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;

2 个答案:

答案 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