我想计算自Unix Epoch(1970-01-01 00:00:00)以来的秒数。通常我会用
date +"%s"
现在,在我的系统上,+"%s"
选项不可用,但我很容易使用其他'日期'选项并使用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"
的内部算法......?
答案 0 :(得分:0)
大多数系统都安装了perl:
perl -le 'print time'
答案 1 :(得分:0)
这是一种POSIX方式,应该适用于所有类Unix系统和Unix系统:
awk 'BEGIN {srand();print srand()}'
如果您使用ksh93
,这也应该有效:
printf "%(%s)T\n"