我在F#中有这个约会
let myDate = new DateTime(2015, 06, 02)
Run Code Online (Sandbox Code Playgroud)
并希望在控制台窗口中输出"2015/06/02".我试过了:
Console.WriteLine(sprintf "%s" myDate.ToString("yyyy/MM/dd"))
Run Code Online (Sandbox Code Playgroud)
但这不会编译(编译器说," 连续参数应该用空格或元组分隔,涉及函数或方法应用程序的参数应该用括号括起来 ")
我如何输出日期为"2015/06/02"?
更新:
正如Panagiotis Kanavos评论的那样,这将有效:
Console.WriteLine("{0:yyyy/MM/dd}", myDate)
Run Code Online (Sandbox Code Playgroud)
您可以轻松调用ToString带有格式字符串的重载:
let formatted = myDate.ToString "yyyy/MM/dd"
Run Code Online (Sandbox Code Playgroud)
但是,sprintf不支持简短形式,但你可以这样做:
printfn "%s" (myDate.ToString "yyyy/MM/dd")
Run Code Online (Sandbox Code Playgroud)
如果您觉得调用对象上的方法功能不够,您也可以为此目的定义一个函数:
let inline stringf format (x : ^a) =
(^a : (member ToString : string -> string) (x, format))
Run Code Online (Sandbox Code Playgroud)
这将使您能够以许多有趣的方式组成功能.例如,您可以像这样写入控制台:
myDate |> stringf "yyyy/MM/dd" |> printfn "%s"
Run Code Online (Sandbox Code Playgroud)
或者像这样:
(stringf "yyyy/MM/dd" >> printfn "%s") myDate
Run Code Online (Sandbox Code Playgroud)