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


当前回答

我只是想在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'

其他回答

我想从bash生成值,并在Java代码中使用该值转换回日期(Java .util)。

以下命令为我在bash文件中生成值:

日期+ % s000

我只是想在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'

纯bash解决方案

自bash 5.0(2019年1月7日发布)以来,您可以使用内置变量EPOCHREALTIME,它包含自epoch以来的秒数,包括小数点后精确到微秒(echo $EPOCHREALTIME输出类似1547624774.371210)。通过移除。最后三个地方是毫秒:

要么使用

(( t = ${EPOCHREALTIME/./} / 1000 ))

或者类似的东西

t=${EPOCHREALTIME/./}  # remove the dot (s → µs)
t=${t%???}             # remove the last three digits (µs → ms)

无论哪种方式t都是1547624774371。

像这样的Python脚本:

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

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

brew install coreutils

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

alias date='gdate'

然后执行

$ date +%s%N