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格式选项,也没有pythonperl解释器。

我们(多谢戴夫!)想到了这个:

 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" 

还要注意,这需要使用adjtimexawk 。 如果没有,那么可以用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'