![]() |
慷慨大方的汤圆 · python ...· 2 月前 · |
![]() |
逃课的手套 · 使用Java替换字符串占位符的几种方法_ja ...· 4 月前 · |
![]() |
腼腆的拖把 · 如何解决 g++ 不支持 auto 自动数据类型?· 1 年前 · |
![]() |
不拘小节的紫菜汤 · reactjs - Cannot read ...· 1 年前 · |
![]() |
悲伤的梨子 · 如何用铁威马NAS快速下载影片_Noont的 ...· 1 年前 · |
Linux中是否有shell命令可以获取以毫秒为单位的时间?
date +%s%N
返回秒数+当前纳秒。
因此,
echo $(($(date +%s%N)/1000000))
是您所需要的。
示例:
$ echo $(($(date +%s%N)/1000000))
1535546718115
date +%s
返回自纪元以来的秒数,如果有用的话。
如下所示的Python脚本:
import time
cur_time = int(time.time()*1000)
在
date
不支持
%N
标志的OS X上,我建议使用
Homebrew
安装
coreutils
。这将使您能够访问一个名为
gdate
的命令,该命令的行为与
date
在Linux系统上的行为类似。
brew install coreutils
要获得更“原生”的体验,您可以随时将其添加到您的
.bash_aliases
中
alias date='gdate'
然后执行
$ date +%s%N
其他答案在大多数情况下可能就足够了,但当我在 BusyBox 系统上遇到问题时,我想我应该补充一下我的两点意见。
有问题的系统不支持
%N
格式选项,也没有Python或Perl解释器。
经过一番挠头之后,我们(谢谢Dave!)想出了这个:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
它从
adjtimex
的输出中提取秒和微秒(通常用于设置系统时钟的选项),并打印它们,而不显示新的行(以便它们粘合在一起)。请注意,微秒字段必须预先填充零,但这不会影响超过六位数的秒字段。因此,将微秒转换为毫秒应该是微不足道的。
如果您需要一个尾随的新行(可能是因为它看起来更好),那么尝试
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))"'
编辑:跟随@CharlesDuffy的评论。派生任何子进程都需要额外的时间。
$ time date +%s%N
1597103627N
date +%s%N 0.00s user 0.00s system 63% cpu 0.006 total
Python is still improving it's VM start time
,而且它没有预先编译的代码(如
date
)那么快。
在我的机器上,大约需要30ms - 60ms (也就是
date
拍摄的6ms的5x-10x )
$ 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 (即1倍到2倍的日期):
$ 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
我只是想向 Alper's answer 添加我必须做的事情来让这个东西工作:
在Mac上,你需要
brew install coreutils
,所以我们可以使用
gdate
。否则,在Linux上,它就是
date
。此函数将帮助您为命令计时,而不必创建临时文件或其他任何东西:
function timeit() {
start=`gdate +%s%N`
bash -c $1
end=`gdate +%s%N`
runtime=$(((end-start)/1000000000.0))
echo " seconds"
}
您可以将其与字符串一起使用:
timeit 'tsc --noEmit'
这是一个针对Linux的便携黑客,用于获取毫秒级的时间:
#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3 # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"
millisec=$(( 10*(t2-t1) ))
echo $millisec
输出为:
3010
这是一个非常廉价的操作,适用于shell内部和procf。
![]() |
腼腆的拖把 · 如何解决 g++ 不支持 auto 自动数据类型? 1 年前 |