【问题标题】:How to get the number of days since a specific date in bash如何在bash中获取自特定日期以来的天数
【发布时间】:2017-10-21 15:05:32
【问题描述】:

我需要找到自特定日期以来今天的天数(假设为 01011980)。想写一个可以在 solaris 上运行的 shell 脚本。

例如:uname -a -->SunOS test-1 5.11 11.3 sun4v sparc sun4v

到目前为止,我已经能够将当前日期格式化为所需的格式。

但找不到将给定日期转换为可用于从当前日期中减去以获取天数的格式的方法。

我尝试了 date +%s 并传递了所需的日期,但每次都显示当前时间。

AG1> date +%s
1495427876
AG1> (date +%s -ud '2003-08-02 17:24:33' )
1495427877
AG1>

我不想使用像 perl 这样的另一种语言,因为这将执行不同的机器,并且额外的编程语言将成为障碍。

谁能帮忙。

【问题讨论】:

标签: shell date solaris


【解决方案1】:

使用算术评估:

echo $(( ($(date +%s) - $(date +%s -ud '2003-08-02 17:24:33')) / 3600 / 24 ))

答案:5041。

编辑:由于问题是关于 SunOS,因此该系统中的 date 实用程序与 GNU date 不同,并且密钥 -d 不起作用。 SunOS 中的 GNU 版本是/usr/gnu/bin/date

【讨论】:

  • 在我的情况下,我得到 0。echo $(( ($(date +%s) - $(date +%s -ud '2003-08-02 17:24:33')) / 3600 / 24 )) 0 AG1> (date +%s -ud '2003-08-02 17:24:33') 1495436160 AG1> (date +%s -ud '2003-08-02 17:24:33') 1495436165 AG1> (date +%s -ud '2003-08-02 17:24:33') 1495436166 .... 看起来 (date +%s -ud '2003-08-02 17:24:33') 仍然给出与 (date +%s) 相同的数字,差异为 0。
  • 代替date,试试/usr/gnu/bin/date (unix.com/solaris/124464-date-d-illegal-option-solaris.html)
  • 所以最终的解决方案是echo $(( ($(date +%s) - $(/usr/gnu/bin/date +%s -ud '1980-01-01 00:00:00'))/3600/24)). 不太关心第一个日期,因为它提供了当前日期。
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多