linux 命令行获取时间,linux - 以毫秒为单位获取时间的命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值