我如何找到自午夜以来的秒数?

Duc*_*cky 13 date

使用该date程序,我如何计算自午夜以来的秒数?

Sté*_*las 19

为了避免竞争条件,仍然假设 GNU 日期:

eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"
Run Code Online (Sandbox Code Playgroud)

使用zsh,您可以在内部进行:

zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))
Run Code Online (Sandbox Code Playgroud)

便携,在没有夏令时开关的时区,你可以这样做:

eval "$(date +'h=%H m=%M s=%S')"
echo "$((${h#0} * 3600 + ${m#0} * 60 + ${s#0}))"
Run Code Online (Sandbox Code Playgroud)

${X#0}是剥离一个前导0这在某些壳状bashdashposh带有原因的问题09(其中壳抱怨它是一个无效的八进制数)。


Ipo*_*cer 11

不需要任何算术表达式,只需使用纯日期:

date -d "1970-01-01 UTC $(date +%T)" +%s
Run Code Online (Sandbox Code Playgroud)

  • 在采用夏令时的时区中,每年有 2 天会给出不正确的结果。例如,在英国 2020 年 10 月 25 日(10 月的最后一个星期日)凌晨 2 点,即午夜后 3 小时,因为在凌晨 1 点发生了时间更改,它给出了 7200 而不是 10800。 (2认同)