获取两个选定日期之间的所有日期
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()
下午好,我是编程新手,正在使用 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()