Bash脚本/命令在前/后5分钟打印出日期

use*_*974 10 bash

我需要以某种方式在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)

  • 从海报的时间规格来看,`isodate = $(date --rfc-3339 = seconds -d"Thu Dec 19 14:10"); date -d"$ isodate + 5分钟"` (2认同)

che*_*ner 8

使用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)


Don*_*van 5

如果您在 linux 下使用 bash,则可以使用该-d参数对现有日期执行日期操作:

  1. 获取相关日期的 EPOCH 时间:

    EPOCH=$(date -d 'Thu Dec 19 14:10' '+%s')
    
    Run Code Online (Sandbox Code Playgroud)

    这为您提供了自 EPOCH(通常为 01/01/1970)以来的时间(以秒为单位

  2. 现在您可以使用简单的数学运算将 EPOCH 时间减去或增加 5 分钟(以秒为单位)

    NEW_EPOCH=$(($EPOCH - 300))
    
    Run Code Online (Sandbox Code Playgroud)

    很明显,5分钟有300秒

  3. 现在将此 NEW_EPOCH 转换回人类可读的日期

    NEW_DATE=$(date -d "1970-01-01 ${NEW_EPOCH} sec")
    
    Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于支持 date -d 选项的 unix 系统(即 Linux)