如何在f#中检查日期是否在营业时间内?

nik*_*nik 1 f#

我试图在fsharp中编写一个简单的函数来检查营业时间,但它不起作用.

这就是我所拥有的:

let businessdate dts =
    let newdts = DateTime.FromOADate dts
    match newdts with
    | not DayOfWeek.Saturday & not DayOfWeek.Sunday & DateTime.Hour >= 8 & DateTime.Hour <= 20 -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

这失败了.Fsharp中的DateTime是否可能没有成员小时?我怎么能这样做?

Tom*_*cek 9

您的代码段的问题在于您使用模式匹配有点奇怪.您不能在match子句的模式中放置任意代码- 您可以使用常量(如DayOfWeek.Saturday)来检查值是否等于某个值,或者您可以使用变量赋值with when子句来检查条件:

let businessdate dts =
    let newdts = DateTime.FromOADate dts
    // Match on day of week and hour properties of the date time
    match newdts.DayOfWeek, newdts.Hour with
    // For weekend, return false
    | DayOfWeek.Saturday, _ | DayOfWeek.Sunday, _ -> false
    // For working hours, return true
    | _, h when h >= 8 && h <= 20 -> true
    // For non-working weekday hours, return false
    | _ -> false
Run Code Online (Sandbox Code Playgroud)

你可以通过使用活动模式使这更好一些,但这是一个更高级的功能,所以我建议你稍后熟悉基本模式.

PS:在实践中,这可能不会起作用,因为像银行假期这样的事情,但我想这不是你问题的重点.