Ocaml的Unix
模块提供了一个stat
函数,该函数返回一个带有float st_mtime
成员的记录。
这似乎总是二级精度,即使在支持亚秒级精度的Linux上也是如此。事实上,它是浮动的而不是一个整数,这让我希望能够获得亚秒精度的时间(或类似的东西),但我不知道如何。
我很高兴使用其他OPAM库。我已经使用了电池,所以我不想也必须使用例如Jane Street Core - 但是较小的库也可以。
这是我用来测试的脚本:
#!/usr/bin/env ocamlscript
Ocaml.packs := ["unix"]
--
open Unix
open Printf
let () =
let this_file = Array.get Sys.argv 0 in
let stats = Unix.stat this_file in
printf "mtime: %f" stats.st_mtime
在我的Linux(x86_64)机器上运行时,会打印:
mtime: 1388567583.000000
Python获得亚秒mtime
没有问题,因此我的操作系统和FS肯定支持它。
答案 0 :(得分:2)
可以在Inria的代码库的Github mirror看到Unix.stat
的实现。如您所见,可移动的第二精度时间值直接转换为双精度数,忽略struct stat
中可用的较新的纳秒精度值。
请考虑提交错误报告,以便改进。
与此同时,如果您迫切需要此功能并且无法等待,您可以编写自己的改进的stat_ext
来返回亚秒级时间戳。当然,除非非常需要,否则最好避免重新实现stdlib。