TimeSpan с использованием обнуляемой даты - PullRequest
10 голосов
/ 27 мая 2009

Как вычесть две даты, когда одна из них обнуляема?

public static int NumberOfWeeksOnPlan(User user)
{
    DateTime? planStartDate = user.PlanStartDate; // user.PlanStartDate is: DateTime?

    TimeSpan weeksOnPlanSpan;

    if (planStartDate.HasValue)
        weeksOnPlanSpan = DateTime.Now.Subtract(planStartDate); // This line is the problem.

    return weeksOnPlanSpan == null ? 0 : weeksOnPlanSpan.Days / 7;
}

Ответы [ 3 ]

13 голосов
/ 27 мая 2009

Чтобы вычесть две даты, когда ноль, одна или обе из них обнуляются , вы просто вычитаете их . Оператор вычитания делает правильные вещи; Вам не нужно самостоятельно писать всю логику, которая уже есть в операторе вычитания.

TimeSpan? timeOnPlan = DateTime.Now - user.PlanStartDate;
return timeOnPlan == null ? 0 : timeOnPlan.Days / 7;
11 голосов
/ 27 мая 2009

Попробуйте это:

weeksOnPlanSpan = DateTime.Now.Subtract(planStartDate.Value); 
1 голос
/ 27 мая 2009

Примените обнуляемую дату и время как обычную дату.

Если вы знаете, что оно не равно нулю, то приведение будет работать нормально.

...