从Unix Shell脚本获取当前日期


68

如何以纪元获取当前日期值,即从1970-1-1开始经过的天数。我需要unix shell脚本中的解决方案。


1
您使用什么语言或技术?
Thomas Owens

我正在使用Unix。我需要在shell脚本中使用它...

3
您确定要从纪元起算的数吗?到目前为止的答案只有几秒钟:)您需要将其除以60 * 60 * 24才能得到答案:)
Jeremy Smyth

1
多亏了所有...但是我的系统无法识别+%s格式说明符,没有得到结果:(

3
那么,您使用的是哪种系统?无论如何,请尝试以下发布的解决方案。也许该脚本更具可移植性……
Stephan202,2009年

Answers:


52

更新:先前在此处发布的答案链接到不再可用的自定义脚本,这仅是因为OP指示date +'%s'对他不起作用。请参阅UberAlex的答案cadrian的答案以获取适当的解决方案。简而言之:

  1. 对于自Unix时代以来的秒数,请使用date(1)以下命令:

    date +'%s'
    
  2. 对于自Unix时代以来的数,将结果除以一天中的秒数(注意双括号!):

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

4
这不是最佳答案,因为链接已断开,因此不再有用。如下所示,它应该是一个衬垫。
山姆·沃特金斯

3
@SamWatkins:非常同意。不幸的是,无法删除已接受的答案。
Stephan202

1
@alancnet:对于OP来说答案并不正确,但是他确实有一个非常奇怪的设置。无论如何,我的选票已经足够多了,所以我将答案重新写成了对地球上其他99.9999%有用的答案。
Stephan202 '16

139

Unix日期命令将以纪元时间显示

命令是

date +"%s"

http://unixhelp.ed.ac.uk/CGI/man-cgi?date

编辑:有人观察到您要求了几天,所以这是该命令除以86,400的结果


7
请注意,这%s是一个扩展。POSIX日期没有%s。有关详细信息,请参见pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html
詹斯

1
并非所有的日子都有86400秒(DST,leap秒等)
Catfish_Man 2013年

5
同样,在Unix时间(日期+%s)中,每天有86400个“秒”,它不包括leap秒,当然也没有DST。答案是正确的。
山姆·沃特金斯

2
是否可以显示自纪元以来的毫秒数?
丹尼尔说莫妮卡(Monica)恢复2015年

@DanielPendergast至少在Bash中expr $(date +"%s") \* 1000
duozmo '16

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

2
请注意,这%s是一个扩展。POSIX日期没有%s。有关详细信息,请参见pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html
詹斯

1
并非所有的日子都有86400(60 * 60 * 24)秒(DST,leap秒等)
Catfish_Man 2013年

3
Unix时间每天确实有86400秒。请注意,如果在特定日期与-d一起使用,建议使用-u作为UTC,否则答案会因时区而异。echo $(($(date -u -d'2014-01-01'+%s)/ 86400))
Sam Watkins


-4

根据您使用的语言,它会很简单

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

具有讽刺意味的是,如果您像许多计算机系统一样使用1900年1月1日作为“零日”,那么昨天就是40,000天。


在我看来,这就像VB。该问题与Unix shell脚本有关。
Noldorin

1
我回答后,他编辑了它。无论如何,谢谢您的投入。
mandroid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.