命令来获取时间以毫秒计算命令来获取时间以毫秒计算(Command to get time in mi

2019-05-12 16:10发布

是否有Linux的一个shell命令来获取毫秒的时间?

Answer 1:

date +%s%N返回的秒+当前纳秒数。

因此, echo $(($(date +%s%N)/1000000))是你所需要的。

例如:

$ echo $(($(date +%s%N)/1000000))
1535546718115

date +%s返回的秒数从epoch,如果这是有用



Answer 2:

  • date +"%T.%N"返回当前时间与纳秒。

     06:46:41.431857000 
  • date +"%T.%6N"返回当前时间与舍入到前6位,这是微秒纳秒。

     06:47:07.183172 
  • date +"%T.%3N"返回当前时间与舍入到前3位数字,这是毫秒纳秒。

     06:47:42.773 

在一般情况下,每场date命令的格式可以给出一个可选的字段宽度。



Answer 3:

纳米是10 -9和毫10 -3。 因此,我们可以利用纳秒的3个字符拿到毫:

date +%s%3N

man date

%N纳秒(000000000..999999999)

自1970-01-01 00:00:00 UTC%S

来源:服务器故障是我得到当前Unix时间使用bash毫秒怎么办? 。



Answer 4:

在OS X上,其中date不支持%N标志,我建议安装coreutils使用自制 。 这会给你访问一个命令调用gdate ,这将表现为date确实在Linux系统上。

brew install coreutils

对于更多的“原生”的经历,你可以随时添加到您的.bash_aliases

alias date='gdate'

然后执行

$ date +%s%N


Answer 5:

date命令didnt提供在OS X毫秒,所以使用从蟒别名

millis(){  python -c "import time; print(int(time.time()*1000))"; }

要么

alias millis='python -c "import time; print(int(time.time()*1000))"'


Answer 6:

其他答案很可能在大多数情况下足够了,但我想我会加入我的2美分,我遇到了一个busybox的系统上的问题。

有问题的系统不支持%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



Answer 7:

这里是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

这是一个非常便宜的操作,这与外壳的内部和procfs的作品



Answer 8:

Perl可以用于此,即使在像AIX平台异国情调。 例:

#!/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;


Answer 9:

python脚本是这样的:

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


Answer 10:

只想添加到@阿尔珀的回答了我必须做的就是这个东西的工作:

在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'



文章来源: Command to get time in milliseconds