【问题标题】:Get Current date in epoch from Unix shell script从 Unix shell 脚本获取当前日期
【发布时间】:2023-04-09 14:00:01
【问题描述】:

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

【问题讨论】:

  • 您使用什么语言或技术?
  • 我使用的是 unix。我需要在 shell 脚本中使用它...
  • 您确定要获取自纪元以来的 天数 吗?到目前为止的答案给了你几秒钟:) 你需要将它除以 60 * 60 * 24 才能得到你的答案:)
  • 谢谢大家...但我的系统无法识别 +%s 格式说明符,我没有得到结果:(
  • 那你是什么系统?无论如何,试试我在下面发布的解决方案。也许那个脚本更便携......

标签: unix shell epoch


【解决方案1】:

Unix Date 命令将以纪元时间显示

命令是

date +"%s"

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

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

【讨论】:

  • 请注意,%s 是一个扩展名。 POSIX 日期没有%s。详情请见pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html。
  • 并非所有日子都有 86400 秒(DST、闰秒等)
  • 同样,在unix时间(日期+%s)中,每天有86400“秒”,它不包括闰秒,当然也不包括夏令时。答案是正确的。
  • 是否可以显示自纪元以来的毫秒数?
  • @DanielPendergast 至少在 Bash 中,expr $(date +"%s") \* 1000。
【解决方案2】:

更新:之前发布的答案链接到不再可用的自定义脚本,仅仅是因为 OP 表示 date +'%s' 对他不起作用。请参阅UberAlex' answer 和cadrian's answer 了解正确 解决方案。简而言之:

  1. 对于自 Unix 纪元以来的 秒数,请使用 date(1),如下所示:

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

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

【讨论】:

  • 这不是最佳答案,而且根本不再有用,因为链接已损坏。它应该是一个衬里,如下所示。
  • @SamWatkins:非常同意。很遗憾,无法删除已接受的答案。
  • @alancnet:OP 的答案并不正确,但他确实有一个非常奇怪的设置。无论如何,我受够了所有的反对票,所以我重写了对地球其他 99.9999% 有用的东西的答案。
【解决方案3】:
echo $(($(date +%s) / 60 / 60 / 24))

【讨论】:

  • 请注意,%s 是一个扩展名。 POSIX 日期没有%s。详情请见pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html。
  • 并非所有日子都有 86400 (60*60*24) 秒(DST、闰秒等...)
  • Unix 时间每天确实有 86400 秒。请注意,如果将 -d 用于特定日期,建议将 -u 用于 UTC,否则答案会因时区而异。 echo $(( $(date -u -d '2014-01-01' +%s) / 86400 ))
【解决方案4】:
echo `date +%s`/86400 | bc

【讨论】:

  • 并非所有日子都有 86400 秒(DST、闰秒等)
【解决方案5】:

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

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

具有讽刺意味的是,如果您像许多计算机系统使用的那样将 1/1/1900 用作“第 0 天”,那么昨天是第 40,000 天。

【讨论】:

  • 对我来说这看起来像 VB。该问题与 Unix shell 脚本有关。
  • 我回答后他编辑了它。无论如何感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2023-03-14
  • 2017-11-14
相关资源
最近更新 更多