Linux命令以毫秒为单位获取时间
Linux中是否有shell命令来获取毫秒级的时间?
date +%s
返回自纪元以来的秒数。
date +%s%N
返回秒数+当前纳秒数。
因此, echo $(($(date +%s%N)/1000000))
是你需要的
-
date +"%T.%N"
以纳秒为单位返回当前时间。 -
date +"%T.%6N"
返回当前时间,以纳秒为单位舍入到前6位,即微秒。 -
date +"%T.%3N"
返回当前时间,以纳秒为单位舍入到前3位,即毫秒。
一般来说, date
命令格式的每个字段都可以赋予一个可选的字段宽度。
纳米是10 -9和毫克10 -3 。 因此,我们可以使用三个纳秒的第一个字符来获得毫米:
date +%s%3N
从man date
:
%N纳秒(000000000..999999999)
自1970-01-01 00:00:00 UTC以来的%s秒
来源:服务器故障如何使用bash获取当前的Unix时间(以毫秒为单位)? 。
在OS X上, date
不支持%N
标志,我build议使用自制软件安装coreutils
。
brew install coreutils
这将使您能够访问称为gdate
的命令,该命令的行为与Linux系统上的date
。
为了获得更多的“本地”体验,您可以将其添加到.bash_aliases
alias date='gdate'
然后执行
$ date +%s%N
像这样的Python脚本:
import time cur_time = int(time.time()*1000)
在大多数情况下,其他答案可能就足够了,但是当我在busybox系统上遇到问题时,我想我会增加2分钱。
有问题的系统不支持%N
格式选项,也没有python
或perl
解释器。
我们(多谢戴夫!)想到了这个:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
它从adjtimex
的输出(通常用于设置系统时钟的选项)中提取秒和微秒,并在没有新行的情况下打印它们(因此它们被粘在一起)。 请注意,微秒字段必须用零预填充,但不会影响长于6位的秒字段。 从这应该是微不足道的微秒转换为毫秒。
如果你需要一个新的行(可能因为它看起来更好),然后尝试
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
还要注意,这需要使用adjtimex
和awk
。 如果没有,那么可以用busybox指向他们
ln -s /bin/busybox ./adjtimex ln -s /bin/busybox ./awk
然后再拨打上面的
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
或者当然你可以把它们放在你的PATH
编辑:
上面的工作在我的busybox设备上。 在Ubuntu上,我尝试了同样的事情,并意识到adjtimex
有不同的版本。 在Ubuntu上,这工作输出的时间以秒为单位,以小数点后的位置为微秒(包括尾随的新行)
sudo apt-get install adjtimex adjtimex -p | awk '/raw time:/ { print $6 }'
我不会在Ubuntu上做这个。 我会用date +%s%N
date
命令没有提供毫秒在OS X上,所以使用了python的别名
millis(){ python -c "import time; print(int(time.time()*1000))"; }
要么
alias millis='python -c "import time; print(int(time.time()*1000))"'
只是想添加到@ Alper的答案,我必须做些什么来得到这个东西的工作:
在Mac上,您需要brew install coreutils
以便我们可以使用gdate
。 否则,在Linux上,它只是date
。 而这个function将帮助你时间命令,而不必创build临时文件或任何东西:
function timeit() { start=`gdate +%s%N` bash -c $1 end=`gdate +%s%N` runtime=$(((end-start)/1000000000.0)) echo " seconds" }
你可以用一个stringtimeit 'tsc --noEmit'