Rya*_*yan 3 macos bash shell command-line date
这是不起作用的:
> echo $(( ($(date +%s) - $(date +%s -d$(date +%Y-%m-%d))) / 60 ))
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
> echo $(date +%s -f%Y-%m-%d $(date +%Y-%m-%d))
Run Code Online (Sandbox Code Playgroud)
以下方法有效,但仅适用于固定的 UTC 偏移量,该偏移量将在标准时间期间中断:
> echo $[ ( ( $(date "+%s") - 28800 ) % 86400 ) / 60 ]
Run Code Online (Sandbox Code Playgroud)
参考:OS X 日期手册
自午夜以来的分钟数(或秒数)可以直接根据时间单独计算。
echo $(( $(date "+10#%H * 60 + 10#%M") )) # Minutes since midnight
echo $(( $(date "+(10#%H * 60 + 10#%M) * 60 + 10#%S") )) # Seconds since midnight
Run Code Online (Sandbox Code Playgroud)
请注意,这仅需要最少的支持date,因此可以与 GNU 或 BSD 一起使用date。
这是通过date输出一个字符串来实现的,该字符串可以直接传递给 shell 的算术表达式构造。
感谢 Petesh 指出需要强制将带有前导零的数字视为十进制。