2013-05-14 274 views
159

Linux中是否有shell命令获取以毫秒为单位的时间?Linux命令获取以毫秒为单位的时间

+8

'日期+%s。%N'会给你纳秒,你能用它工作吗? – Wrikken 2013-05-14 17:01:50

+1

@Wrikken虽然这不是很方便。 – 2014-06-23 12:43:08

+8

date +“%Y%m%d%H%M%S%3N” - 通常我使用这个命令来获取fulldate和独特的时间,直到毫秒来在unix bash脚本中创建临时文件名。如果你的系统无法应付毫秒,你可以分别使用3到6和9进入微秒或纳秒。 – 2016-01-14 03:51:04

回答

215

date +%s返回自纪元以来的秒数。

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

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

+40

在Mac OS上不起作用,因为'date'不支持'%N' – yegor256 2013-08-27 18:36:29

+25

问题是要求Linux命令。对于使用[GNU coreutils](http://www.gnu.org/software/coreutils/)的日期命令,@ alper的答案可以正常工作。 GNUtize你的OSX:[在Mac OS X上安装和使用GNU命令行工具](http://www.topbug.ne​​t/blog/2013/04/14/install-and-use-gnu-command-line-tools- in-mac-os-x /) – caligari 2014-02-21 07:58:28

+53

'date +%s%3N'更快(基于@ michael-defort的答案) – caligari 2014-02-21 08:08:31

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

  • date +"%T.%6N"以纳秒为单位返回当前时间,舍入为前6位数字,即微秒。

  • date +"%T.%3N"返回当前时间,以纳秒为单位舍入到前3位数字,即毫秒。

一般来说,date命令的格式的每个字段可以给出一个可选的字段宽度。

+16

'%xN':字段宽度不错! – fduff 2014-01-22 12:47:54

+0

日期+“%Y%m%d。%H%M%S%3N”以毫秒为单位。 – 2016-01-14 03:48:13

0

Python脚本这样的:

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

这将不会返回毫秒数,这将返回以毫秒为单位表示的秒数。一切都将$ SECONDS000 – kilianc 2015-11-20 19:08:17

+0

重新测试python代码,它现在可以工作。 – maoyang 2016-01-14 20:17:39

+0

@kilianc maoyang的Python代码提供毫秒。 – jlliagre 2016-09-28 12:53:10

27

在OS X上,其中date不支持%N标志,我建议使用homebrew安装coreutils

brew install coreutils 

这会给你访问一个名为gdate命令,将表现为date确实在Linux系统上。

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

alias date='gdate' 

然后执行

$ date +%s%N 
1

其他的答案很可能在大多数情况下足够了,但我认为我会当我在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

2

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

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

OR

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

只想添加到@耳珀回答什么,我有要做这个工作:

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

0

这里是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内部和procfs一起工作

相关问题