如何在F#中打印格式化日期

mrt*_*tle 3 .net f#

我在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)

Mar*_*ann 9

您可以轻松调用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)

  • 如果你当前的文化没有使用'/'作为分隔符我认为你需要逃避它以获得你想要的.像这样:myDate.ToString"yyyy\/ MM\/ dd".在我的文化中,myDate.ToString"yyyy/MM/dd"的输出类似于""2015.06.02" (2认同)