Bash数据 - 如何减去30分钟

时间:2017-09-27 09:44:06

标签: bash date date-formatting

我已经阅读了很多关于这个主题的文档,但是我找不到解决问题的正确方法。

我会从某个变量中减去30分钟。 我大致准备好了这个:

Monday=0120 
date_mon=`date -d $Monday +"%H%M"`
echo $date_mon
0120
new_date_mon=`date -d "$date_mon -30 min" +"%H%M"`
date: invalid date '0120 -30 min'

edit: on the Linux is fine:
0050

(小时必须是%H%M的形式。)

我不知道我做错了什么。

$编辑:

上面的代码是正确的。我试图通过显示错误的MobaXterm执行它,但是我在Linux上直接执行它可以工作。

1 个答案:

答案 0 :(得分:1)

以下命令减去30分钟到下周一01:20

date -d 'Monday 0120 -30min' +'%F %T'

否则使用算术运算

hhmm=0120
((m_from_start_day=(10#$hhmm)/100*60+(10#$hhmm)%100))
((m_from_start_day-=30))
((hhmm=m_from_start_day/60*100+m_from_start_day%60))
echo $hhmm

保留零

printf -v hhmm  %04d $((m_from_start_day/60*100+m_from_start_day%60))
echo $hhmm

注意命令是固定的,因为前导0表示输入是八进制(10#$hhmm)必须使用而不是hhmm

同样printf -v hhmm,除非hhmm声明为-i,(declare +i hhmm删除标志),否则前导零将从八进制转换为十进制。