如何获得以毫秒为单位的当前Unix时间(即自1970年1月1日Unix时代以来的毫秒数)?

#1 楼


date +%s 

将返回自该纪元以来的秒数。
此:
date +%s%N

将返回秒数和当前的纳秒数。
So:
date +%s%N | cut -b1-13

将为您提供自该纪元以来的毫秒数-当前秒数加上左三分之一纳秒。 )

评论


我不知道削减增加了多少毫秒:-)

–凯尔·勃兰特(Kyle Brandt)
2010年6月14日在16:23

或者,如果您想在Shell中完成所有操作,则避免了额外过程的昂贵开销(实际上,当%+ s + N中的位数发生变化时,我们可以避免此问题):echo $(($(date +%s%N)/ 1000))

– MikeyB
2010-6-14在16:38



我认为值得注意的是,该人要求使用Unix,而不是Linux,并且当前的最高答案(日期+%s%N)在我的AIX系统上不起作用。

– Pete
2011年10月25日在16:52



@Pete +1与OS X和FreeBSD相同

– ocodo
2012年5月19日,0:28



%N在OSX Yosemite上不起作用

–马特·克拉克(Matt Clark)
15年6月3日在20:32

#2 楼

您可以简单地使用%3N将纳秒截断为3个最高有效数字(然后是毫秒):

$ date +%s%3N
1397392146866


在我的Kubuntu 12.04(精确的穿山甲)上。

但是请注意,根据目标系统的不同,可能无法实现%N。例如。在嵌入式系统(buildroot rootfs,使用非HF ARM交叉工具链编译)上进行了测试,没有%N

$ date +%s%3N
1397392146%3N


(还有我的(非根)Android平板电脑没有%N。)

评论


@warren:我看到您编辑了1397392146%3N并将其更改为1397392146%N,但是1397392146%3N的输出是我在android平板电脑的busybox控制台上真正看到的。您能解释一下您的编辑吗?

–乔
15年6月25日在8:00

沃伦(Warren)的评论是“从3更改为6,因为3仅会使您达到微秒”。他的编辑似乎完全是虚假的。你应该回滚。

–布克佐尔
2015年12月25日,0:27

这是GNU coreutils特别的功能。最终,这是在gnulib中实现的:github.com/gagern/gnulib/blob/…。

–菱角菌属
17年11月6日在20:23



可能那里的一个点很有意义。 date +%s。%3N打印1510718281.134。

– Darksky
17年11月15日下午4:01

这应该是公认的答案。

–诺亚·萨斯曼(Noah Sussman)
19年4月30日在15:29

#3 楼

date +%N在OS X上不起作用,但是您可以使用以下之一:Ruby:ruby -e 'puts Time.now.to_f'


Python:python -c 'import time; print time.time()'


Node.js:node -e 'console.log(Date.now())'


PHP:php -r 'echo microtime(TRUE);'


长生不老药:DateTime.utc_now() |> DateTime.to_unix(:millisecond)

互联网:wget -qO- http://www.timeapi.org/utc/now?\s.\N

或以毫秒为单位四舍五入到最接近的秒date +%s000



评论


为了完整性... node -e'console.log(Date.now())'

–slf
13年10月10日在18:06

使用PHP:php -r'echo microtime(TRUE);'

– TachyonVortex
13年11月22日在16:41

当然,您只需要等待这些口译员热身即可。这也可行:wget -qO- http://www.timeapi.org/utc/now?\\s.\\N

–卡米洛·马丁(Camilo Martin)
2014年6月23日下午13:26

或者,如果您实际上不需要毫秒,而只需正确的格式:date +%s000

–Lenar Hoyt
15年4月22日在16:15

apple.stackexchange.com/questions/135742/…具有通过Brew的coreutils在OSX中进行此操作的说明

–相同
17年11月17日在19:53

#4 楼

我的解决方案不是最好的,但是它对我有用:

#5 楼

只是把它扔在那里,但我认为带除法的正确公式是:

echo $(($(date +%s%N)/1000000))


#6 楼

此解决方案可在macOS上使用。

如果您考虑使用Bash脚本并提供Python,则可以使用以下代码:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'


#7 楼

对于建议运行外部程序以这样的速度获取毫秒数的人们,您也可以这样做:

从这里开始,请记住,并非所有程序都会在一秒钟内运行。衡量!

评论


您不需要询问本地系统的时间。我想这暗示了这个问题。您还依赖于网络连接。

–orkoden
15年1月29日在11:27

@orkoden该问题明确询问“自1970年1月Unix时代以来的毫秒数”。另外,我更要指出的是,您不应该仅仅为了获得时间而启动整个Ruby或Python(或wget)-是通过快速通道完成还是以毫秒为单位。

–卡米洛·马丁(Camilo Martin)
15年1月29日在11:57

是的,我知道您给出的解决方案更糟,以突出不良解决方案的缺陷。我尝试了几种解决方案并测量了时间。 lpaste.net/119499结果有点有趣。即使在非常快的i7机器上,日期也需要3毫秒才能运行。

–orkoden
15年1月29日在12:38

@orkoden不错的测试!什么操作系统?这可能与进程产生的开销有关。

–卡米洛·马丁(Camilo Martin)
15年1月30日在13:18

@Nakilon,这就是为什么不应该像任何东西那样依赖可卷曲的便利。

–卡米洛·马丁(Camilo Martin)
17年5月17日在22:24

#8 楼

如果您正在寻找一种显示脚本运行时间的方法,则以下内容将提供(并非完全准确)的结果:

尽可能在脚本的开头,输入following

basetime=$(date +%s%N)

这将为您提供类似于1361802943996000000的起始值。

在脚本结尾处,使用以下内容

echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"

将显示类似

runtime: 12.383 seconds

注意:

(1 * 10 ^ 09)可以用1000000000替换。

"scale=3"是一种相当罕见的设置,强制bc执行您想要的操作。还有更多!

我只在Windows 7 / MinGW上进行了测试...我手边没有合适的* nix框。

评论


或者您可以只使用时间