Linux中是否有shell命令以毫秒为单位获取时间?


当前回答

date +%s%N返回秒数+当前纳秒。

因此,echo $(($(date +%s%N)/1000000))就是您所需要的。

例子:

$ echo $(($(date +%s%N)/1000000))
1535546718115

Date +%s返回自epoch以来的秒数,如果有用的话。

其他回答

在OS X上,date不支持%N标志,我建议使用Homebrew安装coreutils。这将使您能够访问一个名为gdate的命令,其行为与Linux系统上的date相同。

brew install coreutils

为了获得更“原生”的体验,你可以把这个添加到你的.bash_aliases中:

alias date='gdate'

然后执行

$ date +%s%N

像这样的Python脚本:

import time
cur_time = int(time.time()*1000)

date +%s%N返回秒数+当前纳秒。

因此,echo $(($(date +%s%N)/1000000))就是您所需要的。

例子:

$ echo $(($(date +%s%N)/1000000))
1535546718115

Date +%s返回自epoch以来的秒数,如果有用的话。

我只是想在Alper的回答中补充一下我必须做的事情:

在Mac上,你需要brew install coreutils,所以我们可以使用gdate。否则在Linux上,它只是日期。这个函数将帮助您执行命令,而无需创建临时文件或任何东西:

function timeit() {
    start=`gdate +%s%N`
    bash -c $1
    end=`gdate +%s%N`
    runtime=$(((end-start)/1000000000.0))
    echo " seconds"
}

你可以将它与字符串一起使用:

timeit 'tsc --noEmit'

date命令在OS X上没有提供毫秒,所以使用了python中的别名

millis(){  python -c "import time; print(int(time.time()*1000))"; }

OR

alias millis='python -c "import time; print(int(time.time()*1000))"'

编辑:跟随@CharlesDuffy的评论。 fork任何子进程都需要额外的时间。

$ time date +%s%N
1597103627N
date +%s%N  0.00s user 0.00s system 63% cpu 0.006 total

Python仍然在改进它的虚拟机启动时间,它没有提前编译的代码(比如日期)快。

在我的机器上,它花了大约30 - 60毫秒(即日期花费的6毫秒的5 -10倍)

$ time python -c "import time; print(int(time.time()*1000))"
1597103899460
python -c "import time; print(int(time.time()*1000))"  0.03s user 0.01s system 83% cpu 0.053 total

我认为awk比python轻量级,所以awk的范围是6ms到12ms(即日期的1x到2x):

$ time awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}'
1597103729525
awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}'  0.00s user 0.00s system 74% cpu 0.010 total