从Unix shell脚本中获取当前日期的Epoch时间

89

如何在Unix shell脚本中获取当前日期值的epoch值,即自1970年1月1日以来经过的天数。


1
你使用的是哪种编程语言或技术? - Thomas Owens
我正在使用Unix。 我需要在shell脚本中使用它... - Krishna
3
你确定要从纪元算起的“天数”吗?目前为止得到的答案是秒数 :) 你需要将其除以60 * 60 * 24才能得到你的答案 :) - Jeremy Smyth
1
感谢大家的帮助,但我的系统无法识别+%s格式说明符,我没有得到结果 :( - Krishna
3
你使用的是什么系统?无论如何,请尝试使用我下面发布的解决方案。也许那个脚本更具可移植性... - Stephan202
显示剩余3条评论
5个回答

176

Unix的date命令会以epoch时间显示,

命令为:

date +"%s"

https://linux.die.net/man/1/date

编辑:一些人注意到您想要获取天数,因此这个命令的结果被86,400除以。


7
请注意,%s 是一个扩展功能。POSIX日期没有 %s。请查看 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html 了解详情。 - Jens
1
并非所有的日子都有86400秒(夏令时,闰秒等等...) - Catfish_Man
5
在Unix时间(date +%s)中,每天都有86400个“秒”,这不包括闰秒,当然也不包括夏令时。答案是正确的。 - Sam Watkins
2
能否显示自纪元以来的毫秒数? - Daniel Node.js
在Bash中,至少可以使用expr $(date +"%s") \* 1000 - duozmo
1
这并不会给你实际的毫秒级当前时间(而我在我的性能分析中正在寻找)。 - Sridhar Sarnobat

61

更新: 先前发布在这里的答案链接到了一个自定义脚本,现在已不再可用,只是因为OP指出 date +'%s' 对他无效。请查看UberAlex的答案cadrian的答案以获取正确的解决方案。简而言之:

  1. 要获取自Unix纪元以来的秒数,请使用date(1)命令,如下所示:

    date +'%s'
    
    对于自 Unix 纪元以来的天数,将结果除以一天中的秒数(注意双括号!):
  2. echo $(($(date +%s) / 60 / 60 / 24))
    

4
这不是最佳答案,链接已经失效,因此不再有用。下面应该只需要一个简单的一句话。 - Sam Watkins
3
非常同意。不幸的是,已接受的答案无法删除。 - Stephan202
1
@alancnet:对于楼主来说,答案并不是错误的,但他确实有一个非常奇怪的设置。无论如何,我已经受够了所有的踩,所以我重写了答案,使其对其他99.9999%的人有用。 - Stephan202

12
echo $(($(date +%s) / 60 / 60 / 24))

2
请注意,%s 是一个扩展功能。POSIX日期没有 %s。有关详细信息,请参见 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html。 - Jens
1
并非所有的日子都拥有 86400 秒(606024)(例如夏令时,闰秒等等)。 - Catfish_Man
3
Unix时间确实每天恰好有86400秒。 注意,如果与-d一起使用以获取特定日期,请建议使用-u来指定UTC时区, 否则答案将因时区而异。示例代码: echo $(( $(date -u -d '2014-01-01' +%s) / 86400 )) - Sam Watkins

2
echo `date +%s`/86400 | bc

2
并非所有的日子都有86400秒(夏令时,闰秒等等...) - Catfish_Man

-3

根据您使用的编程语言,这可能只是一些简单的东西。

CInt(CDate("1970-1-1") - CDate(Today()))

有趣的是,如果你像许多计算机系统一样使用1/1/1900作为“零日”,那么昨天就是第40,000天。


那看起来像是VB。这个问题是关于Unix shell脚本的。 - Noldorin
2
他在我回答后进行了编辑。无论如何,感谢您的意见。 - mandroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接