Могу ли я сделать Foreach на TimeSpan по типу Timespan? - PullRequest
2 голосов
/ 26 апреля 2010

У меня есть требование, чтобы независимо от времени начала и даты мне нужно было циклически проходить этот промежуток времени и вычислять цифры на уровне месяца. Я не могу понять это, и, возможно, это невозможно, но я хотел бы сделать что-то вроде:

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

Возможно ли это, или мне нужно рассчитать количество месяцев, просто перебрать количество месяцев и рассчитать начало / конец этого месяца на основе моего индекса?

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

промежуток времени - это отрезок времени, а не пара дат - я думаю, здесь есть путаница. 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 голосов
/ 26 апреля 2010

Я бы сделал что-то вроде этого:

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
...