Alp*_*per 318
date +%s%N 返回秒数+当前纳秒数.
因此,echo $(($(date +%s%N)/1000000))就是你所需要的.
例如:
$ echo $(($(date +%s%N)/1000000))
1535546718115
Run Code Online (Sandbox Code Playgroud)
date +%s 返回自纪元以来的秒数,如果有用的话
小智 313
date +"%T.%N" 以纳秒返回当前时间.
06:46:41.431857000
Run Code Online (Sandbox Code Playgroud)date +"%T.%6N" 返回当前时间,纳秒次数舍入为前6位数,即微秒.
06:47:07.183172
Run Code Online (Sandbox Code Playgroud)date +"%T.%3N" 返回当前时间,纳秒次数舍入为前3位数,即毫秒.
06:47:42.773
Run Code Online (Sandbox Code Playgroud)通常,date命令格式的每个字段都可以赋予可选的字段宽度.
fed*_*qui 70
纳米是10 -9和毫10 -3.因此,我们可以使用纳秒的3个第一个字符来获得毫米:
date +%s%3N
Run Code Online (Sandbox Code Playgroud)
来自man date:
%N 纳秒(000000000..999999999)
自1970-01-01 00:00:00 UTC以来的%s秒
来源:服务器故障如何使用bash以毫秒为单位获取当前的Unix时间?.
Jos*_*ook 45
在OS X上,date不支持%N标志的地方,我建议coreutils使用自制软件安装.这将使您可以访问所谓的命令,该命令gdate将date在Linux系统上运行.
brew install coreutils
Run Code Online (Sandbox Code Playgroud)
要获得更"原生"的体验,您可以随时将其添加到您的体验中 .bash_aliases
alias date='gdate'
Run Code Online (Sandbox Code Playgroud)
然后执行
$ date +%s%N
Run Code Online (Sandbox Code Playgroud)
Soc*_*owi 22
自bash5.0(于2019 年 1 月 7 日发布)起,您可以使用内置变量EPOCHREALTIME,其中包含自纪元以来的秒数,包括小数位到微秒 (\xce\xbcs) 精度(echo $EPOCHREALTIME打印类似1547624774.371210英语或1547624774,371210德语的内容、法语等)。通过删除小数点分隔符和最后三位,我们得到毫秒:
要么使用
\n(( t = ${EPOCHREALTIME/[^0-9]/} / 1000 ))\nRun Code Online (Sandbox Code Playgroud)\n或者
\nt=${EPOCHREALTIME/[^0-9]/} # remove the decimal separator (s \xe2\x86\x92 \xc2\xb5s)\nt=${t%???} # remove the last three digits (\xc2\xb5s \xe2\x86\x92 ms)\nRun Code Online (Sandbox Code Playgroud)\n无论哪种方式t都会像1547624774371.
小智 9
这是Linux的一种可移植的hack,以毫秒为单位:
#!/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
Run Code Online (Sandbox Code Playgroud)
输出为:
3010
Run Code Online (Sandbox Code Playgroud)
这是一个非常便宜的操作,可用于shell内部和procfs。
date 命令没有在OS X上提供毫秒,所以使用了python的别名
millis(){ python -c "import time; print(int(time.time()*1000))"; }
Run Code Online (Sandbox Code Playgroud)
要么
alias millis='python -c "import time; print(int(time.time()*1000))"'
Run Code Online (Sandbox Code Playgroud)
小智 6
在大多数情况下,其他答案可能就足够了,但我想我会在BusyBox系统上遇到问题时加两分钱。
有问题的系统不支持%N格式选项,也没有 Python 或 Perl 解释器。
经过多次挠头,我们(感谢戴夫!)想出了这个:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
Run Code Online (Sandbox Code Playgroud)
它从adjtimex(通常用于设置系统时钟的选项)的输出中提取秒和微秒,并在没有换行的情况下打印它们(因此它们粘在一起)。请注意,微秒字段必须预先填充零,但这不会影响超过六位数的秒字段。由此,将微秒转换为毫秒应该是微不足道的。
如果您需要尾随新行(可能是因为它看起来更好),请尝试
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
Run Code Online (Sandbox Code Playgroud)
另请注意,这需要adjtimex并且awk可用。如果没有,那么使用 BusyBox,您可以使用以下命令在本地指向它们:
ln -s /bin/busybox ./adjtimex
ln -s /bin/busybox ./awk
Run Code Online (Sandbox Code Playgroud)
然后将上面的称为
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
Run Code Online (Sandbox Code Playgroud)
或者当然你可以把它们放在你的 PATH
编辑:
以上适用于我的 BusyBox 设备。在 Ubuntu 上,我尝试了同样的事情并意识到它adjtimex有不同的版本。在 Ubuntu 上,这可以以秒为单位输出时间,小数位到微秒(包括尾随的新行)
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
Run Code Online (Sandbox Code Playgroud)
不过我不会在 Ubuntu 上这样做。我会用date +%s%N