0

而不是使用:

int noOfDaysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

我想使用传入的 2 个值来获取一个月的天数:

public ActionResult Index(int? month, int? year)
{
    DateTime Month = System.Convert.ToDateTime(month);
    DateTime Year = System.Convert.ToDateTime(year);
    int noOfDaysInMonth = DateTime.DaysInMonth(Year, Month);

(Year, Month) 被标记为无效参数?有任何想法吗?也许system.conert.todatetime.month?

4

4 回答 4

3

它们是DateTime变量,但DaysInMonth需要ints:

int noOfDaysInMonth = DateTime.DaysInMonth(year.Value, month.Value);

如果它们可以为空:

int noOfDaysInMonth = -1;
if(year != null && month != null)
    noOfDaysInMonth = DateTime.DaysInMonth(year.Value, month.Value);
于 2013-09-03T14:51:21.820 回答
1

DateTime.DaysInMonth采用两个DateTime实例的方法没有重载。无需创建这两个DateTime实例,只需将您收到的参数直接传递给DaysInMonth.

请注意,该方法不能采用空值,因此要么删除可空值,要么清理您的输入,即:检查年份和月份是否为空,如果是,请使用一些默认值。

于 2013-09-03T14:50:47.387 回答
0

您不需要DateTime在这里使用任何对象,但您需要验证输入!

public ActionResult Index(int? month, int? year)
{
    int noOfDaysInMonth = -1;

    if(year.HasValue && year.Value > 0 && 
            month.HasValue && month.Value > 0 && month.Value <=12)
    {
        noOfDaysInMonth = DateTime.DaysInMonth(year.Value, month.Value);
    } 
    else
    {
        // parameters weren't there or they had wrong values
        // i.e. month = 15 or year = -5 ... nope!

        noOfDaysInMonth = -1; // not as redundant as it seems...
    }

    // rest of code.
}

之所以if有效,是因为条件是从左到右评估的。

于 2013-09-03T15:10:53.133 回答
0

DateTime.DaysInMonth 采用 int 参数而不是日期时间参数

public static int DaysInMonth(
    int year,
    int month
)

但请注意,您正在传递可为空的 int。因此,请先检查它们是否有价值

if(month.HasValue && year.HasValue)
{
   var numOfDays = DaysInMonth(year.Value, month.Value);
}
于 2013-09-03T14:51:50.170 回答