在vb.net中For循环的日期

时间:2009-08-26 14:56:41

标签: vb.net date foreach

在vb.net中,我有两个数据值,如下所示:

Dim startp as datetime
Dim endp as datetime

我有一个名为ProcessData(soemdate)的函数来处理数据操作。

在VB.net中我有办法做一些像

这样的事情
For each day between startp and endp
 ProcessData(soemdate)
Next 

由于

6 个答案:

答案 0 :(得分:25)

这是另一种方法。

Dim startP As DateTime = New DateTime(2009, 1, 1)
Dim endP As DateTime = New DateTime(2009, 2, 1)
Dim CurrD As DateTime = startP

While (CurrD <= endP)        
    ProcessData(CurrD)
    Console.WriteLine(CurrD.ToShortDateString)
    CurrD = CurrD.AddDays(1)
End While

答案 1 :(得分:18)

For Each Day As DateTime in Enumerable.Range(0, (endp - startp).Days) _
                            .Select(Function(i) startp.AddDays(i)) 
    ProcessData(Day)
Next Day

答案 2 :(得分:9)

添加Joel Coehoorn的答案,我个人认为应该是接受的答案,因为我总是尽量避免使用While循环而不管它们的安全性如何。对于...每个都是一个更安全的方法,虽然可枚举的内联不是很漂亮。但是,您可以将其移动到一个函数以使事物更具可读性,并且可以根据需要重新使用。

For Each Day As DateTime In DateRange(StartDate, EndDate)
    ProcessData(Day)
    Console.WriteLine(Day.ToShortDateString)
Next

Public Shared Function DateRange(Start As DateTime, Thru As DateTime) As IEnumerable(Of Date)
    Return Enumerable.Range(0, (Thru.Date - Start.Date).Days + 1).Select(Function(i) Start.AddDays(i))
End Function

我还在Enumerable系列中添加了1,因为Joel拥有它,它不会返回结束日期,在我的情况下,我需要它返回范围内的所有日期,包括开始和结束日期。

Enumerable.Range本身就是一种循环,它将i天添加到startdate中,每次调用都会推进i,在这种情况下为0,开始日和结束日之间的差异为1.因此,第一次调用它时,你得到了Start.AddDays(0)的结果,接下来你将获得Start.AddDays(1),依此类推,直到范围完成。

答案 3 :(得分:1)

如果您将日期转换为 OLE Automation Date OADate,您可以轻松遍历每一天,其中左侧部分代表日期,右侧部分代表时间。

例如#06/19/2018#.ToOADate转换为43270.0

For loopDate As Double = #06/19/2018#.ToOADate To #07/01/2018#.ToOADate

    Dim thisDate As Date = DateTime.FromOADate(loopDate)

    ' Do your stuff here e.g. ProcessData(thisDate)

Next

答案 4 :(得分:0)

是的,您可以使用累加器日期:

Dim Accumulator as DateTime
Accumulator = startp

While (Accumulator <= endp)


    Accumulator = Accumulator.AddDays(1)
End While

没有经过测试,而且我是C#程序员,所以如果我的语法错误就很容易。

答案 5 :(得分:-1)

设置一个包含所有日期和查询值的日历表。

SQL:

Select Date as MyDate from tblCalendar Where Date >= StartDt And Date <= EndDate

.NET:

While Reader.read
  process(MyDate)
End While