Linux 将人类可读的时间范围转换为相关的秒数

Linux 将人类可读的时间范围转换为相关的秒数,linux,bash,shell,Linux,Bash,Shell,我试图找出如何实现“智能”时间解析,正如我们在我自己的一个脚本中通过shutdown命令所知道的那样 那么如何在bash脚本中进行这些转换呢 now -> 1448537350 +30 -> 1448539150 +1h -> 1448540950 +1d -> 1448623750 00:00 -> 1448582400 我当前的解决方案不是很好,只支持+/-XX格式,但并不真正解析传入的参数,而是使用参数进行数学运算: #!/bin/bash TIME=$(d

我试图找出如何实现“智能”时间解析,正如我们在我自己的一个脚本中通过
shutdown
命令所知道的那样

那么如何在bash脚本中进行这些转换呢

now -> 1448537350
+30 -> 1448539150
+1h -> 1448540950
+1d -> 1448623750
00:00 -> 1448582400
我当前的解决方案不是很好,只支持
+/-XX
格式,但并不真正解析传入的参数,而是使用参数进行数学运算:

#!/bin/bash
TIME=$(date "+%s")
let TIME=$TIME$1
echo $TIME
这样称呼

./script.sh +3600 #in 1 hour
那么,有什么我可以重用的东西可以让人类可读的时间范围作为参数吗

像这样干杯:

date -d 'now' +%s
date -d '+30min' +%s
date -d '+1hour' +%s
date -d '00:00' +%s
我希望这有帮助。为了进一步阅读,我建议如下:

date -d 'now' +%s
date -d '+30min' +%s
date -d '+1hour' +%s
date -d '00:00' +%s

我希望这有帮助。为了进一步阅读,我建议。

如果可以使用外部工具,您可以尝试使用该工具

以下是一个例子:

日期添加

在shell中执行日期算术(日期数学)的工具。给定一个日期和持续时间列表,这将计算新的日期。给定持续时间和日期列表,将计算新日期

$dateadd 2010-02-02+4d

=>

2010-02-06

$dateadd 2010-02-02+1w

=>

2010-02-09

$dateadd-1d

12:15:00

甚至约会时间:

$dateadd 2012-03-12T12:05:00-1d4h

=>

2012-03-11T08:05:00


如果可以使用外部工具,您可以尝试使用该工具

以下是一个例子:

日期添加

在shell中执行日期算术(日期数学)的工具。给定一个日期和持续时间列表,这将计算新的日期。给定持续时间和日期列表,将计算新日期

$dateadd 2010-02-02+4d

=>

2010-02-06

$dateadd 2010-02-02+1w

=>

2010-02-09

$dateadd-1d

12:15:00

甚至约会时间:

$dateadd 2012-03-12T12:05:00-1d4h

=>

2012-03-11T08:05:00


您可以使用
date
命令本身检查参数是否可读。如果不是,则可以使用regex检查它是否为数字。例如:

#!/bin/bash
TIME=$(date "+%s")

if date -d "$1" "+%s" > /dev/null 2>&1; then ## Human Readable Format
  d=$(date -d "$1" "+%s")
  let TIME=$TIME+$d
  echo $TIME
elif [[ $1 =~ ^[+-]+{1}[0-9]+$ ]]; then ## Numerical Value
  let TIME=$TIME$1
  echo $TIME
else
  echo "Parsing Error!"
fi

您可以使用
date
命令本身检查参数是否可读。如果不是,则可以使用regex检查它是否为数字。例如:

#!/bin/bash
TIME=$(date "+%s")

if date -d "$1" "+%s" > /dev/null 2>&1; then ## Human Readable Format
  d=$(date -d "$1" "+%s")
  let TIME=$TIME+$d
  echo $TIME
elif [[ $1 =~ ^[+-]+{1}[0-9]+$ ]]; then ## Numerical Value
  let TIME=$TIME$1
  echo $TIME
else
  echo "Parsing Error!"
fi

argh我尝试了“+1m”,但它不起作用,并且没有立即在手册页中找到其他选项-顺便说一句。
man-date
指向
info-date
,这相当广泛。。。但这是我所知道的oversaw@pagid不客气。从来都不知道
date
有如此广泛的
info
页面。argh我尝试了“+1m”,但它不起作用,并且没有立即在手册页中找到其他选项-顺便说一句。
man date
指向
info date
这是非常广泛的。。。但这是我所知道的oversaw@pagid不客气。从来不知道
date
有如此广泛的
info
页面。