C#中的DateTime无法表示的错误

时间:2017-03-14 20:14:54

标签: c# datetime

我必须在当前时间添加15分钟并将其设置为C#中的DateTime对象。如果我的当前时间是晚上11点50分,并且添加了15分钟,则小时部分变为24并导致以下错误:"小时,分钟和秒参数描述不可表示的日期时间。&#34 ;

public static DateTime NewTime(this DateTime dateTime)
    {
        int hour = dateTime.Hour;
        int minute = dateTime.Minute;
        if (minute > 0)
        {
            minute = dateTime.Minute + (15);
            if (minute >= 60)
            {
                hour = hour + 1;
                minute = 0;
            }
        }
        return new DateTime(dateTime.Year, dateTime.Month,
             dateTime.Day, hour, minute, 0);
    }

由于

3 个答案:

答案 0 :(得分:5)

您的逻辑没有意义,如果分钟大于0,您只需添加分钟,那么如果它们为0会发生什么?

要添加时间,请使用内置于类型定义中的方法,无需重新发明轮子。例如:

public static DateTime Add15Minutes(this DateTime dateTime)
{
    return dateTime.AddMinutes(15);
}

答案 1 :(得分:2)

我认为你可能会过度思考这个? DateTime已经提供了许多支持方法,这可能会满足您的需要而无需创建扩展方法:

var myValue = new DateTime(2017,3,14,23,50,0);
var result = myValue.AddMinutes(15);

答案 2 :(得分:1)

您正在检查分钟属性上的溢出,但不检查小时属性。您可以检查小时属性上的溢出,如下所示:

public static DateTime NewTime(this DateTime dateTime)
{
    int hour = dateTime.Hour;
    int minute = dateTime.Minute;
    var day = dateTime.Day;
    if (minute > 0)
    {
        minute = dateTime.Minute + (15);
        if (minute >= 60)
        {
            hour = hour + 1;
            minute = 0;
        }
    }
    if (hour > 24) {
        day += 1;
    }
    return new DateTime(dateTime.Year, dateTime.Month,
         day, hour, minute, 0);
}

然而,您也会遇到一个月内溢出的问题,处理起来会更加复杂。相反,只需使用内置的Add函数:

public static DateTime NewTime(this DateTime dateTime)
{
    return new dateTime.AddMinutes(15);
}