F # daterange generator?

I am trying to write a function that generates a DateTimes list using generator syntax:

let dateRange = 

    let endDate = System.DateTime.Parse("6/1/2010")
    let startDate = System.DateTime.Parse("3/1/2010")

    seq {
          for date in startDate..endDate do
              if MyDateClass.IsBusinessDay(date) then yield date
        }

but the generator block ('seq') will not be properly disassembled. He wants time. Although the syntax of the generator seems perfect for what I want to do, it is rather not intuitive for anything other than two numbers.

  • Can I use generator syntax to create a DateTime range?
  • Is there a better way to think about how to create a range than I wrote (ie the sentence "in")
+5
source share
2 answers

DateTime .NET TimeSpan, . TimeSpan, IEnumerable < > , . :

let rec dates (fromDate:System.DateTime) (toDate:System.DateTime) = seq {
            if fromDate <= toDate then 
                yield fromDate
                yield! dates (fromDate.AddDays(1.0)) toDate
            }

, :

let result = dates startDate endDate |> Seq.filter (fun dt -> IsBusinessDate(dt))
+5

TimeSpan Zero, - startDate .. TimeSpan(1,0,0,0) .. endDate. , , :

open System

type TimeSpanWrapper = { timeSpan : TimeSpan } with
  static member (+)(d:DateTime, tw) = d + tw.timeSpan
  static member Zero = { timeSpan = TimeSpan(0L) }

let dateRange =
    let endDate = System.DateTime.Parse("6/1/2010")
    let startDate = System.DateTime.Parse("5/1/2010")
    let oneDay = { timeSpan = System.TimeSpan(1,0,0,0) }

    seq {
          for date in startDate .. oneDay .. endDate do
             if MyDateClass.IsBusinessDay(date) then yield date
        }
+11

All Articles