2010-04-26 59 views
2

我有一個要求,無論我需要通過該時間跨度循環並計算月份級別的數字的開始和日期。我似乎無法弄清楚,也許這是不可能的,但我想這樣做:我可以用Timespan類型在TimeSpan上做一個Foreach嗎?

FOREACH Month As TimeSpan in ContractRange.Months 
    Do Calculations (Month.Start, Month.End) 
NEXT 

這是可能的,或者我需要計算的月數,而只是通過遍歷月數並根據我的索引計算該月的開始/結束時間?

+4

我不清楚這裏:什麼數據類型是ContractRange? – 2010-04-26 16:39:47

+0

TimeSpan沒有開始或結束屬性。您應該發佈ContractRange類型定義。 – 2010-04-26 16:55:02

+0

我認爲他的印象是TimeSpan有一個開始和結束的日期,但這只是一段時間,並非特定於任何日期 - 即1個月,16天。 – SqlRyan 2010-04-26 16:56:34

回答

1

Timespan是一段時間,而不是一對日期 - 我認爲這裏有混亂。時間跨度代表「1個月」在這種情況下,而不是一個特定的月份(如2010-04-01至2010-04-31)。做你要找什麼,你需要這樣的(僞代碼):

Get the number of months between start and end of contract range 
For each month in that list 
    determine start and end of that month 
    Do your calculations(start, end) 
next month 
+0

這就是我想我需要做的事情,希望有一個很好的方式來做到這一點。 – RiddlerDev 2010-04-26 17:41:35

0

我會做這樣的事情:

Dim CurrentDate, StartDate, EndDate as DateTime 

' Get dates for contract range 
GetDatesForContractRange(StartDate, EndDate) ' ref? i'm not a Vb guy 

CurrentDate = StartDate 
While CurrentDate < EndDate 

    ' Calculate month bounds 
    Dim StartMonth, EndMonth as DateTime 
    StartOfMonth = CurrentDate.AddDays(-CurrentDate.Day + 1) 
    EndOfMonth = StartOfMonth.AddMonths(1).AddDays(-1) ' or AddSeconds(-1) 

    Do Calculations (StartOfMonth, EndOfMonth) 
    CurrentDate = CurrentDate.AddMonths(1) 
End While