如何获得自纪元以来在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:
dateOS 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。