在VS 2010中升级后出现奇怪的FormatException

时间:2010-07-12 00:00:40

标签: c#-4.0 formatexception

升级到VS 2010后,我得到了这个FormatException。没有什么特别的。 代码:

private void ManageDateEditControls()
{
    apoDateEdit.DateTime = DateTime.Parse(string.Format("01/{0}/{1}", DateTime.Now.Month-1, DateTime.Now.Year));
    eosDateEdit.DateTime = DateTime.Parse(string.Format("{0}/{1}/{2}", GetLastDayOfMonth(DateTime.Now.Month + 1),
        DateTime.Now.Month - 1, DateTime.Now.Year)); <-- FormatException occurs in this line.
}

private static int GetLastDayOfMonth(int month)
{
    // set return value to the last day of the month
    // for any date passed in to the method

    // create a datetime variable set to the passed in date
    DateTime dtTo = new DateTime(DateTime.Now.Year, month, 1);

    // overshoot the date by a month
    dtTo = dtTo.AddMonths(1);

    // remove all of the days in the next month
    // to get bumped down to the last day of the
    // previous month
    dtTo = dtTo.AddDays(-(dtTo.Day));

    // return the last day of the month
    return dtTo.Day;
}

让我们假设如果您在2010年7月21日运行,现在就可以获得。我认为这是一个有效的日期。 我已经测试了生成的日期和它的确定...这个项目在VS 2008中工作时从未遇到过这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

FormatException31/6/2010作为参数传递给DateTime.Parse()造成的。 2010年6月31日不是有效日期 - 六月只有30天。

如果您需要任何月份的最后一天,最好使用DateTime.DaysInMonth()方法。它将月份和年份都作为参数,因此它可以处理闰年。