C # Количество дней между двумя датами проблемы - PullRequest
1 голос
/ 18 мая 2010

У меня небольшая проблема с кодом ниже, переменная 'days' всегда кажется равной 0 независимо от того, как далеко друг от друга дни.

Вы видите что-то явно не так?

        System.TimeSpan span = dates[0] - dates[1]; // e.g. 12/04/2010 11:44:08 and 18/05/2010 11:52:19
        int days = (int)span.TotalDays;

        if (days > 10) //days always seems to be 0
        {
            throw new Exception("Over 10 days");
        }

Спасибо

Ответы [ 5 ]

6 голосов
/ 18 мая 2010

Поскольку вы вычитаете более позднюю дату из более ранней даты, согласно вашим комментариям, TotalDays будет отрицательным. В вашем примере -36.

Поэтому сравнение (days > 10) не удастся. Вы должны использовать

int days = Math.Abs((int)span.TotalDays);

Предполагая, что вы не установили дату [0] равной дате [1], нет никаких причин, по которым TotalDays будет возвращать ноль для выбранных вами дат в комментариях.

4 голосов
/ 18 мая 2010

Общее количество дней должно быть отрицательным, но в любом случае не равным нулю, так как вы должны вычесть более раннюю дату из более поздней. Кажется, dates[0] и dates[1] не содержат то, что вы думаете.

1 голос
/ 18 мая 2010

Я только что проверил это:

DateTime date1 = new DateTime(2010, 12, 31);
DateTime date2 = new DateTime(2010, 1, 1);

TimeSpan timeSpan = date2 - date1;
Console.WriteLine(timeSpan.TotalDays);

Эта программа производит вывод: -364. Так что должно отлично работать! Один вопрос: Вы использовали DateTime[] для dates массива?

Кстати: days > 10 не проверяет, равен ли days нулю.

0 голосов
/ 18 мая 2010

Либо сделайте это:

System.TimeSpan span = dates[0] - dates[1]; 
int days = Math.Abs((int)span.TotalDays);

if (days > 10)
{
    throw new Exception("Over 10 days");
}

Или это:

System.TimeSpan span = dates[1] - dates[0]; 
int days = (int)span.TotalDays;

if (days > 10)
{
    throw new Exception("Over 10 days");
}
0 голосов
/ 18 мая 2010

Если мы предположим, что ваш код выглядит именно так, и массив дат заполнен правильно, то здесь нет ничего плохого, что могло бы привести к тому, что дни были бы точно равны нулю. Может быть, проверить, что ваш массив дат содержит правильные значения? За исключением этого, отправьте больше кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...