当前位置:  开发笔记 > 开发工具 > 正文

将时间转换为秒字符串问题

如何解决《将时间转换为秒字符串问题》经验,为你挑选了2个好方法。

我正在阅读" 真实世界OCaml"一书,并且从该书的代码中得到了错误.既然,我没有在GitHub看到任何关于图书问题的活动,我想在这里问你.这是问题cobe:

let log_entry maybe_time message =
    let time = match maybe_time with
        | Some x -> x
        | None -> Time.now ()
    in
    Time.to_sec_string time ^ " -- " ^ message
;;

错误是下一个错误:

Error: This expression has type zone:Core.Zone.t -> string but an expression was expected of type string

据我所知,这是关于打电话

Time.to_sec_string时间

ivg.. 11

在较旧版本的Core库中,该to_sec_string函数具有以下接口:

(** [to_sec_string t] Same as to_string, but without milliseconds *)
val to_sec_string : t -> string

在某些时候,他们改变了界面,现在就是这样

(** Same as [to_string_abs], but without milliseconds *)
val to_sec_string : t -> zone:Zone.t -> string

这意味着,现在这是一个带有两个参数的函数.第一个仍然是类型的值Time.t,但第二个是指定时区的带标签的类型参数Zone.t.与常规位置参数不同,带标签的参数可以传递给任意位置的函数,因此您无需记住参数的顺序.通常的调用将如下所示:

let s = Time.to_sec_string time ~zone:Time.Zone.local

其中Time.Zone.local是时区对象,表示您的本地时区.由于它是带标签的参数,您也可以像这样调用函数:

let s = Time.to_sec_string ~zone:Time.Zone.local time

此外,由于这两个参数都有不同的类型,OCaml甚至可以猜测谁不使用标签,所以你可以回退到位置参数:

let s = Time.to_sec_string time Time.Zone.local

最后,Core中的大多数类型都有接口to_string函数.因此,更容易的解决方法是使用它,而不是to_sec_string.它有一点点不同和更详细的格式,但是:

Time.to_string time ^ " -- " ^ message


senior_pimie.. 5

我在GitHub上找到了关于该问题的讨论

解决方案是添加:

Time.to_sec_string ~zone:Core.Zone.local (time) ^ " -- " ^ message

虽然,我不明白它是如何工作的.



1> ivg..:

在较旧版本的Core库中,该to_sec_string函数具有以下接口:

(** [to_sec_string t] Same as to_string, but without milliseconds *)
val to_sec_string : t -> string

在某些时候,他们改变了界面,现在就是这样

(** Same as [to_string_abs], but without milliseconds *)
val to_sec_string : t -> zone:Zone.t -> string

这意味着,现在这是一个带有两个参数的函数.第一个仍然是类型的值Time.t,但第二个是指定时区的带标签的类型参数Zone.t.与常规位置参数不同,带标签的参数可以传递给任意位置的函数,因此您无需记住参数的顺序.通常的调用将如下所示:

let s = Time.to_sec_string time ~zone:Time.Zone.local

其中Time.Zone.local是时区对象,表示您的本地时区.由于它是带标签的参数,您也可以像这样调用函数:

let s = Time.to_sec_string ~zone:Time.Zone.local time

此外,由于这两个参数都有不同的类型,OCaml甚至可以猜测谁不使用标签,所以你可以回退到位置参数:

let s = Time.to_sec_string time Time.Zone.local

最后,Core中的大多数类型都有接口to_string函数.因此,更容易的解决方法是使用它,而不是to_sec_string.它有一点点不同和更详细的格式,但是:

Time.to_string time ^ " -- " ^ message



2> senior_pimie..:

我在GitHub上找到了关于该问题的讨论

解决方案是添加:

Time.to_sec_string ~zone:Core.Zone.local (time) ^ " -- " ^ message

虽然,我不明白它是如何工作的.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有