2013-05-14 277 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一起工作

相關問題