Рейтинг:
2
OriginalGriff
Цитата:
Почему разница между "01-Sep-2017" и "30-Sep-2017" составляет 30 дней
Хм. Это не так, согласно вашему примеру:
Dim d1 As DateTime = "01-Sep-2017"
Dim d2 As DateTime = "30-Sep-2017"
Dim TTF As New TimeSpan
TTF = d2.Subtract(d1)
TTF.TotalDays
TotalDays is 29 days
Member 9803671
извините за мой вопрос в последней строке, это неправильно.
разница между "01-Sep-2017" и "30-Sep-2017" составляет 29 дней.
но почему не 30 дней?
потому что разница между "15 сентября 2017 года" и "30 сентября 2017 года" составляет 15 дней.
мне нужно общее количество дней между двумя датами.
OriginalGriff
И это то, что вы получаете.
30 - 15 == 15
30 - 1 == 29.
Почему вы ожидаете, что все будет по-другому?
Если вам нужно количество дней в месяце, вам нужно вычесть "первое число месяца а" из "первого числа месяца а + 1", а не "первое число месяца а" из "последнего числа месяца а"
Member 9803671
мне нужно общее количество дней между любыми двумя датами
OriginalGriff
И это именно то, что вы получаете!
Математика не меняется, потому что это дата!
2 - 1 == 1
3 - 1 == 2
30 - 15 == 15
...
Рейтинг:
0
Maciej Los
Если я вас хорошо понимаю, вы хотите включить день, на котором заканчивается временной период. Итак, вы должны добавить 1 к результату.
OriginalGriff уже упоминал об этом (но другими словами) в комментарии к своему ответу.
Цитата:
OriginalGriff 2 часа 10 минут назад
Ответить
[Изменить комментарий.] [Удалить комментарий.]
И это то, что вы получаете.
30 - 15 == 15
30 - 1 == 29.
Почему вы ожидаете, что все будет по-другому?
Если вам нужно количество дней в месяце, вам нужно вычесть "первое число месяца а" из "первого числа месяца а + 1", а не "первое число месяца а" из "последнего числа месяца а"
Проверить это:
Dim d1 As DateTime = "01-Sep-2017"
Dim d2 As DateTime = "30-Sep-2017"
Dim result = (d2-d1).TotalDays + 1
Console.WriteLine("The difference between date: {0} and {1} is {2} days.", d1, d2, result)
Я настоятельно рекомендую прочитать это:
Выполнение арифметических операций с датами и временем | Microsoft Docs[
^]
Ralf Meier
Привет Мацей,
проблема здесь в том, что (для ОП) временные интервалы вычисляются по-разному. Он считает, что разница между "15-Sep-2017" и "30-Sep-2017" составляет 15 дней (что вычисляется по Date.Substract), а разница между 01-Sep-2017 и 30-Sep-2017 составляет 30 дней (что не вычисляется таким образом по Date.Substract).
Но вы определенно правы (как я уже упоминал выше в качестве комментария к комментарию к решению Атлапуре Амбриша) с вашим расчетом и предложением.
Maciej Los
- Спасибо, Ральф.
Овации,
Мацей
Рейтинг:
0
Atlapure Ambrish
Код возвращает 29 полных дней, можете ли вы поделиться более подробной информацией о том, где вы видите 30 дней?
Dim d1 As DateTime = "01-Sep-2017"
Dim d2 As DateTime = "30-Sep-2017"
Dim TTF As New TimeSpan
TTF = d2.Subtract(d1)
TTF.TotalDays
Member 9803671
извините за мой вопрос в последней строке, это неправильно.
разница между "01-Sep-2017" и "30-Sep-2017" составляет 29 дней.
но почему не 30 дней?
потому что разница между "15 сентября 2017 года" и "30 сентября 2017 года" составляет 15 дней.
мне нужно общее количество дней между двумя датами.
Ralf Meier
Ваше мнение неверно.
Если разница (для вас) между 01 сентября 2017 года и 30 сентября 2017 года составляет 30 дней, то разница между 15 сентября 2017 года и 30 сентября 2017 года должна составлять 16 дней.
Таким образом, расчет очень прост - вы всегда можете добавить 1 день, чтобы получить желаемый (или необходимый) результат.
Atlapure Ambrish
Способ date. subtract разработан так, что он дает вам правильный результат, но, похоже, вы хотите включить и начальный день. В этом случае вам просто нужно добавить 1 к результату, возвращенному по дате.Метод вычитания.