将闰年的日期转换为DateTime
我正在尝试编写自己的日历。 但现在我在闰年遇到一些问题。 我无法解析2月29日datetime。每次我想运行我的代码时,出现错误“字符串未被识别为有效的日期时间”。将闰年的日期转换为DateTime
我只会得到错误,如果我想解析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;
你有内置函数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);
}
用法是这样的:
看看我的编辑。我解决了DateTime.IsLeapYear函数。因为我听说该功能有一些缺点。 – CallMeLeonardo
IsLeapYear年份'%4 == 0 &&(year%100!= 0 || year%400 == 0)'。因此,您自己的代码几乎完全是您想要的。 – Ralf
@Ralf哦,好的。很高兴知道。我在某处听到有关“它使用不同类型的日历”的信息。但在这种情况下,我听到了一些胡言乱语。 – CallMeLeonardo
你并不需要检查闰年。 只需使用:
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
我真的很喜欢你使用的方法。虽然我发现了这个问题,但我会包含您的解决方案。 – CallMeLeonardo
你确定你正在试图解析日期的年份是闰年? – Pikoh
'string year = DateTime.Now.Year.ToString();' - 但是... 2017并不是闰年... –
您确定它是闰年的代码,可以解决2016年的飞跃年,但不是2017 :) – john