Member 9803671 Ответов: 3

Промежуток времени между двумя датами в VB.NET


вычислить разницу в днях между двумя датами в vb.net используя значение типа TimeSpan

Что я уже пробовал:

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



Dim d1 As DateTime = "15-Sep-2017"
Dim d2 As DateTime = "30-Sep-2017"
Dim TTF As New TimeSpan
TTF = d2.Subtract(d1)
TTF.TotalDays
TotalDays is 15 days



Why difference between  "01-Sep-2017" and "30-Sep-2017" 29 days not 30 days because difference between "15-Sep-2017" and "30-Sep-2017" is 15 days. i want number of days between two days.

3 Ответов

Рейтинг:
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 к результату, возвращенному по дате.Метод вычитания.