linux - 以毫秒为单位获取时间的命令
Linux中是否有shell命令以毫秒为单位获取时间?
MOHAMED asked 2019-03-13T19:07:35Z
10个解决方案
264 votes
date +%s返回秒数+当前纳秒数。
因此,date +%s是您所需要的。
例如:
$ echo $(($(date +%s%N)/1000000))
1535546718115
date +%s返回自纪元以来的秒数,如果有用的话
Alper answered 2019-03-13T19:07:59Z
247 votes
date以纳秒为单位返回当前时间。
date
date返回当前时间,纳秒次数舍入为前6位数,即微秒。
date
date返回当前时间,纳秒次数舍入为前3位数,即毫秒。
date
通常,date命令格式的每个字段都可以给出一个可选的字段宽度。
Michael Defort answered 2019-03-13T19:08:52Z
56 votes
纳米是10-9和毫10-3。 因此,我们可以使用纳秒的3个第一个字符来获得毫米:
date +%s%3N
从man date:
%N纳秒(000000000..999999999)
自1970-01-01 00:00:00 UTC以来的%s秒
来源:服务器故障我如何使用bash以毫秒为单位获得当前的Unix时间?
fedorqui answered 2019-03-13T19:09:42Z
35 votes
在OS X上,.bash_aliases不支持%N标志,我建议使用自制软件安装coreutils。 这将使您可以访问名为gdate的命令,该命令在Linux系统上的行为与date相同。
brew install coreutils
要获得更“原生”的体验,您可以随时将其添加到.bash_aliases
alias date='gdate'
然后执行
$ date +%s%N
Joshua Cook answered 2019-03-13T19:10:25Z
5 votes
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))"'
Thamme Gowda answered 2019-03-13T19:10:51Z
3 votes
在大多数情况下,其他答案可能就足够了,但我想我在加热箱系统遇到问题时会增加2美分。
有问题的系统不支持date +%s%N格式选项,并且没有awk或perl解释程序。
经过多次努力,我们(感谢戴夫!)想出了这个:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
它从date +%s%N的输出中提取秒和微秒(通常用于设置系统时钟的选项)并在没有新行的情况下打印它们(因此它们粘在一起)。 请注意,微秒字段必须预先填充零,但这不会影响秒数字段,无论如何都要超过6位数。 从这一点来说,将微秒转换为毫秒应该是微不足道的。
如果你需要一个尾随的新行(可能是因为它看起来更好),那么试试吧
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
另请注意,这需要date +%s%N和awk。 如果没有,那么使用busybox可以在本地指向它们
ln -s /bin/busybox ./adjtimex
ln -s /bin/busybox ./awk
然后将上面称为
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
或者你当然可以把它们放在你的date +%s%N中
编辑:
以上工作在我的busybox设备上。 在Ubuntu上我尝试了同样的事情,并意识到date +%s%N有不同的版本。 在Ubuntu上,这可以输出以秒为单位的时间,以小数点为单位(包括一个尾随的新行)
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
我不会在Ubuntu上这样做。 我会用date +%s%N
pghalliday answered 2019-03-13T19:12:19Z
0 votes
像这样的python脚本:
import time
cur_time = int(time.time()*1000)
maoyang answered 2019-03-13T19:12:45Z
0 votes
只是想添加@Alper的答案,我必须做些什么才能使这些东西工作:
在Mac上,你需要timeit 'tsc --noEmit'所以我们可以使用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'
Chet answered 2019-03-13T19:13:25Z
0 votes
这是一个以某种方式可移植的hack for linux以毫秒为单位获取时间:
#!/bin/sh
read up rest
sleep 3 # your command
read up rest
millisec=$(( 10*(t2-t1) ))
echo $millisec
输出是:
3010
这是一个非常便宜的操作,它适用于shell内部和procfs
Bastian Bittorf answered 2019-03-13T19:14:00Z
0 votes
即使在像AIX这样的异国平台上,也可以使用Perl。 例:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw(gettimeofday);
my ($t_sec, $usec) = gettimeofday ();
my $msec= int ($usec/1000);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime ($t_sec);
printf "%04d-%02d-%02d %02d:%02d:%02d %03d\n",
1900+$year, 1+$mon, $mday, $hour, $min, $sec, $msec;
Lorinczy Zsigmond answered 2019-03-13T19:14:26Z