首页 文章

自'date'命令没有“%s”选项可用时计算自Unix Epoch以来的秒数

提问于
浏览
2

我想计算自Unix Epoch(1970-01-01 00:00:00)以来的秒数 . 通常我会用

date +"%s"

现在,在我的系统上, +"%s" 选项不可用,但我很容易使用其他一些'date'选项并使用bc解析它:

date -u +"scale=0;(((((%Y-1970)*365.2425+%j)*24+%H)*60+%M)*60+%S)/1" | bc

这是短暂的

years   = year_now - 1970
days    = years   * 365.2425 + day_of_year_now
hours   = days    * 24       + hour_now
minutes = hours   * 60       + minute_now
seconds = minutes * 60       + second_now

到现在为止还挺好 . 然后我发现这个计算的结果与 +"%s" 选项的结果不匹配 . 我需要添加一个幻数:

date -u +"scale=0;(((((%Y-1970)*365.2425+%j)*24+%H)*60+%M)*60+%S-36936)/1" | bc

为什么?

此外,几个月后,这个神奇的数字已经从 -36936 变为 -99792 .

为什么?

如果有人能够改正我的数学,我会感激不尽 . 也许某人有 date 的源代码,可以告诉我 +"%s" 的内部算法......?

2 回答

  • 0

    大多数系统都安装了perl:

    perl -le 'print time'
    
  • 0

    这是一个POSIX方式,应该适用于所有Unix和Unix类系统:

    awk 'BEGIN {srand();print srand()}'
    

    如果您使用 ksh93 ,这也应该有效:

    printf "%(%s)T\n"
    

相关问题