在vb.net中,我有两个数据值,如下所示:
Dim startp as datetime
Dim endp as datetime
Run Code Online (Sandbox Code Playgroud)
我有一个函数调用ProcessData(soemdate)
,它处理dataporting.
在VB.net中有一种我可以做的事情
For each day between startp and endp
ProcessData(soemdate)
Next
Run Code Online (Sandbox Code Playgroud)
谢谢
Joh*_*nFx 26
这是另一种方法.
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
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 18
For Each Day As DateTime in Enumerable.Range(0, (endp - startp).Days) _
.Select(Function(i) startp.AddDays(i))
ProcessData(Day)
Next Day
Run Code Online (Sandbox Code Playgroud)
加入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
Run Code Online (Sandbox Code Playgroud)
我还在Enumerable系列中添加了1,因为Joel拥有它,它不会返回结束日期,在我的情况下我需要它返回范围内的所有日期,包括开始和结束日期.
Enumerable.Range本身就是一种循环,它将i天添加到startdate中,每次调用都会推进i,在这种情况下为0,开始日和结束日之间的差异为1.因此,第一次调用它时会得到Start的结果.AddDays(0),接下来你将获得Start.AddDays(1),依此类推,直到范围完成.
归档时间: |
|
查看次数: |
30236 次 |
最近记录: |