Bash脚本/命令打印出日期前/后5分钟
我需要以某种方式使用bash或其他实用程序中的date命令来打印给定值之前5分钟和之后5分钟的日期和时间。 例如: 输入:Bash脚本/命令打印出日期前/后5分钟,bash,Bash,我需要以某种方式使用bash或其他实用程序中的date命令来打印给定值之前5分钟和之后5分钟的日期和时间。 例如: 输入: Thu Dec 19 14:10 输出: Thu Dec 19 14:05 Thu Dec 19 14:10 Thu Dec 19 14:15 我发现date命令可用于在当前日期/时间执行此操作,是否可与传递的值(即不是当前日期/时间)一起使用?对于当前时间,您可以通过键入来实现此目的 $ date --date='5 minutes ago'; date; date
Thu Dec 19 14:10
输出:
Thu Dec 19 14:05 Thu Dec 19 14:10 Thu Dec 19 14:15
我发现
date
命令可用于在当前日期/时间执行此操作,是否可与传递的值(即不是当前日期/时间)一起使用?对于当前时间,您可以通过键入来实现此目的
$ 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
使用特定日期(ex 1978/01/10)
使用GNU
date
,您可以使用--date
选项的参数执行简单形式的日期/时间算术:
$ date --date 'now + 5 minutes'
使用BSDdate
(至少是Mac OS X附带的版本),-v
选项允许您执行类似操作,但仅限于当前时间:
$ date -v +5M
$ date -v -5M
否则,您需要在将时间转换为UNIX时间戳(自1970年1月1日起的秒数)后显式执行数学运算:
如果在linux下使用bash,则可以使用
-d
参数对现有日期执行日期操作:
EPOCH=$(date -d 'Thu Dec 19 14:10' '+%s')
这将为您提供自纪元(通常为1970年1月1日)以来的时间(以秒为单位)NEW_EPOCH=$(($EPOCH - 300))
显然,5分钟内有300秒NEW_DATE=$(date -d "1970-01-01 ${NEW_EPOCH} sec")
请注意,这仅适用于支持日期-d选项的unix系统(即Linux)如果您希望在当前+/-5分钟内执行此操作,并且使用Bash 4.2或更新版本,则可以在不使用外部工具的情况下执行此操作:
$ printf -v now '%(%s)T'
$ echo "$now"
1516161094
$ f='%a %b %d %R'
$ printf "%($f)T %($f)T %($f)T\n" "$((now-300))" "$now" "$((now+300))"
Tue Jan 16 22:46 Tue Jan 16 22:51 Tue Jan 16 22:56
的%(datefmt)T
格式化字符串允许打印日期时间字符串。如果跳过参数(如此处)或参数为-1
,则使用当前时间
%s
以秒为单位格式化自历元以来的时间,-v now
将输出存储在now
中,而不是打印它
f
只是一个方便的变量,因此我不必为输出重复格式化字符串三次
由于使用printf
的参数必须以秒为单位,因此必须使用外部工具将输入字符串(如Thu Dec 19 14:10
)转换为该格式,并替换
printf -v now '%(%s)T'
例如,任何
now=$(date '+%s' -d 'Thu Dec 19 14:10') # GNU date
now=$(date -j -f '%a %b %d %T' 'Thu Dec 19 14:10' '+%s') # macOS date
从海报的时间规范来看,
isodate=$(日期--rfc-3339=秒-d“Thu-Dec 19 14:10”);日期-d“$isodate+5分钟”
printf -v now '%(%s)T'
now=$(date '+%s' -d 'Thu Dec 19 14:10') # GNU date
now=$(date -j -f '%a %b %d %T' 'Thu Dec 19 14:10' '+%s') # macOS date