我试图在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是否可能没有成员小时?我怎么能这样做?
您的代码段的问题在于您使用模式匹配有点奇怪.您不能在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:在实践中,这可能不会起作用,因为像银行假期这样的事情,但我想这不是你问题的重点.