我需要以某种方式在bash或其他实用程序中使用date命令打印出给定值之前5分钟和之后5分钟的日期和时间.例如:
输入:
Thu Dec 19 14:10
Run Code Online (Sandbox Code Playgroud)
输出:
Thu Dec 19 14:05 Thu Dec 19 14:10 Thu Dec 19 14:15
Run Code Online (Sandbox Code Playgroud)
我看到该date命令可用于在当前日期/时间执行此操作,是否可以使用传递的值,即不是当前日期/时间?
Raf*_*afa 16
您可以通过键入来实现当前时间.
$ date --date='5 minutes ago'; date; date --date='5 minutes'
Qui Dez 19 16:09:17 BRST 2013
Qui Dez 19 16:14:17 BRST 2013
Qui Dez 19 16:19:17 BRST 2013
Run Code Online (Sandbox Code Playgroud)
使用特定日期(来自1978/01/10).
$ date --date='1978-01-10 + 5 minutes'
Ter Jan 10 00:05:00 BRT 1978
Run Code Online (Sandbox Code Playgroud)
使用GNU date,您可以使用--date选项的参数执行一种简单的日期/时间算术形式:
$ date --date 'now + 5 minutes'
Run Code Online (Sandbox Code Playgroud)
使用BSD date(至少是Mac OS X附带的版本),该-v选项允许您执行类似的操作,但仅限于当前时间:
$ date -v +5M
$ date -v -5M
Run Code Online (Sandbox Code Playgroud)
否则,您需要在将时间转换为UNIX时间戳(1970年1月1日以来的秒数)后显式执行数学运算:
$ date -r $(( $(date +%s) + 300 )) # 5 minutes (300 seconds) from now
$ date -r $(( $(date +%s) - 300 )) # 5 minutes ago
Run Code Online (Sandbox Code Playgroud)
如果您在 linux 下使用 bash,则可以使用该-d参数对现有日期执行日期操作:
获取相关日期的 EPOCH 时间:
EPOCH=$(date -d 'Thu Dec 19 14:10' '+%s')
Run Code Online (Sandbox Code Playgroud)
这为您提供了自 EPOCH(通常为 01/01/1970)以来的时间(以秒为单位)
现在您可以使用简单的数学运算将 EPOCH 时间减去或增加 5 分钟(以秒为单位)
NEW_EPOCH=$(($EPOCH - 300))
Run Code Online (Sandbox Code Playgroud)
很明显,5分钟有300秒
现在将此 NEW_EPOCH 转换回人类可读的日期
NEW_DATE=$(date -d "1970-01-01 ${NEW_EPOCH} sec")
Run Code Online (Sandbox Code Playgroud)请注意,这仅适用于支持 date -d 选项的 unix 系统(即 Linux)