Получение всех дат между двумя выбранными датами - PullRequest
0 голосов
/ 16 марта 2020

Добрый день, я новичок в программировании и работаю с VB. NET.

Мне нужно получить разницу между двумя датами, а затем перечислить все промежуточные даты в listbox1. Я попробовал следующий код, но он не работает.

Private Sub breaks()

    Dim date1 As Date = DateTimePicker1.Value.ToString("dd/MM/yyyy")
    Dim date2 As Date = DateTimePicker2.Value.ToString("dd/MM/yyyy")

    While date1 <= date2
        Dim result = date1
        ListBox1.Items.Add(result)
        Dim term = 1
        date1 = DateTimePicker1.Value.AddDays(term)

    End While

End Sub

Функция вызывается внутри кнопки. При выполнении он показывает только боковые панели, но остается пустым.

На рисунке показаны дата начала 03/10/2020 и дата окончания 03/16/2020, однако результат (список) ничего не возвращает.

enter image description here

Я ожидал, что мой результат наступит:
03/10/2020
03/11/2020
03/12/2020
03/14/2020
03/15/2020
03/16/2020

интервал между ними. Может кто-нибудь сказать мне, что не так?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Вы можете использовать некоторые linq для простого решения

ListBox1.DataSource =
    Enumerable.Range(0, 2 + DateTimePicker2.Value.Subtract(DateTimePicker1.Value).Days).
    Select(Function(offset) DateTimePicker1.Value.AddDays(offset)).
    ToList()

. Он генерирует список чисел, которые будут действовать как смещение от начальной даты, затем добавляет их указанное количество раз (различное для разных дат). в днях), чтобы создать все даты. Не требуется l oop.

Кредит этот ответ

Редактировать:

Это также может быть применено к DataGridView аналогично, но для чтобы создать один столбец, нам нужно выбрать анонимный тип.

DataGridView1.DataSource =
    Enumerable.Range(0, 2 + DateTimePicker2.Value.Subtract(DateTimePicker1.Value).Days).
    Select(Function(offset) New With {.Date = DateTimePicker1.Value.AddDays(offset)}).
    ToList()
0 голосов
/ 16 марта 2020

Вы должны избегать использования строк для даты и времени, пока они не должны быть текстовыми.

Переменная date1 может использоваться для всех дат, например:

Dim date1 As Date = DateTimePicker1.Value
Dim date2 As Date = DateTimePicker2.Value

While date1 <= date2
    ListBox1.Items.Add(date1.ToString("MM/dd/yyyy"))
    Dim term = 1
    date1 = date1.AddDays(term)

End While

Кроме того, вы должны обязательно установить Option Strict On в качестве значения по умолчанию для новых проектов и установить его для текущего проекта.

...