我已经阅读了很多关于这个主题的文档,但是我找不到解决问题的正确方法。
我会从某个变量中减去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上直接执行它可以工作。
答案 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
删除标志),否则前导零将从八进制转换为十进制。