如何获得自纪元以来在OSX终端中的时间(以毫秒为单位)?
Linux / Ubuntu等效于date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
这在我的OSX终端中不起作用:
OSX $ date +%s.%N
1403377800.N
如何获得自纪元以来在OSX终端中的时间(以毫秒为单位)?
Linux / Ubuntu等效于date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
这在我的OSX终端中不起作用:
OSX $ date +%s.%N
1403377800.N
Answers:
date
OS X中的程序不同于GNU的coreutils date
程序。您可以安装coreutils(包括gnu-date),那么您将拥有一个date
支持毫秒的版本。
由于对于原始OS X用户而言,从源代码进行安装可能会很麻烦,因此建议您使用Homebrew。
要使用Homebrew安装这些工具,请在终端中运行以下oneliner:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
现在已安装Homebrew(明智的做法是在安装后遵循安装程序的建议)。现在,我们将使用来安装coreutils brew
。
brew install coreutils
如安装所述,所有命令都已安装了前缀“ g”(例如gdate,gcat,gln等)。如果您确实需要使用这些命令的常规名称,则可以在PATH(~/.bash_profile
)中添加一个“ gnubin”目录,例如:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
您现在可以运行
gdate +%s.%N
这将输出自纪元以来的时间(以毫秒为单位)。
date
成为GNU date
(而不是gdate)
+%s.%N
格式将秒精确到纳秒,而不是毫秒。在使用brew安装之后gdate
,我检查了联机帮助页以查看是否有毫秒。不是。它还没有说%N
可以指定的精度,但是无论如何我还是尝试了。我发现将秒仅降低到毫秒精度(即小数点后三位)的命令是gdate +%s.%3N
。
在OS X中,仅date +%s
当OS X date
的输出不支持其精度时才运行,并且内部表示形式不支持的任何多余精度都将被截断为负无穷大。
如果需要毫秒输出,则可以使用以下命令,尽管由于上述原因,仅通过添加零而不是增加精度来纠正输出。以下内容在支持必要精度的系统上确实输出正确的毫秒数。
echo $(($(date +'%s * 1000 + %-N / 1000000')))
上面命令的源代码:Unix.SE –如何从Unix时代获取毫秒数
如果只想在OS X中添加正确数量的零的命令,则可以使用:
date +%s000
%-N
,因此不执行任何操作(如果$N
设置了shell变量,可能会造成麻烦)。只需使用date +%s000
(或date +%s.000
如果您想要小数点)。
date
命令仅%-N
通过as 传递N
,因此会干扰计算。尝试设置N=7000000000000000000
,然后尝试命令...在实践中这是不太可能的情况,但是对于不依赖于环境的某些东西,我会感到更加安全。
gdate
安装在中的路径/usr/local/bin/gdate
。