获取两个选定日期之间的所有日期

Getting all the dates between two selected dates

下午好,我是编程新手,正在使用 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,但是结果(列表框)没有 return 任何内容。

我期待我的结果:
2020 年 3 月 10 日
2020 年 3 月 11 日
2020 年 3 月 12 日
2020 年 3 月 14 日
2020 年 3 月 15 日
2020 年 3 月 16 日

他们之间的间隔。 谁能告诉我怎么了?

在日期时间需要是文本之前,您应该避免使用字符串。

变量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 设置为新项目的默认值,并将其设置为当前项目。

您可以使用一些 linq 来获得简单的解决方案

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

它生成一个数字列表作为初始日期的偏移量,然后将它们相加指定的次数(日期之间以天为单位不同)以创建所有日期。无需循环。

归功于 this answer

编辑:

这也可以类似地应用于 DataGridView,但为了制作单列,我们需要 select 匿名类型。

DataGridView1.DataSource =
    Enumerable.Range(0, 2 + DateTimePicker2.Value.Subtract(DateTimePicker1.Value).Days).
    Select(Function(offset) New With {.Date = DateTimePicker1.Value.AddDays(offset)}).
    ToList()