我必须在当前时间添加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);
}
由于
答案 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);
}