我正在使用bash脚本,想做一个从3个小时前到3个小时后的时间循环.例如,伪码如下:
time_end = 2000010100 #YYYYMMDDHH
time_beg = 1996010100 #YYYYMMDDHH
for time_beg -le time_end # while time_beg<=time_end
time_tmp = time_beg + 3 hours
do some calculation from time_beg to time_tmp
time_beg = time_tmp
end for
并且部件do some calculation from time_beg to time_tmp
是用于模拟从1996-01-01-00
到1996-01-01-03
(例如)的东西的模型.然后下一次运行将从1996-01-01-03
到1996-01-01-06
开始.
为了完成time_tmp = time_beg + 3 hours
的部分,我使用以下代码:
YMDH=$YYYYMMDDHH
time_resolution=3
INC=+${time_resolution}hours
YMDH_newend=`date +%Y%m%d%H -d "${YMDH::8} ${YMDH:8:2} ${INC}"`
echo ${YMDH_newend}
我测试它工作得很好,但在$YYYYMMDDHH=1996033
的时候出错.运行上面的代码得到的结果是$YYYYMMDDHH=1996033105
$YYYYMMDDHH=1996033105
,这是错误的,应该是$YYYYMMDDHH=1996033104
...
那到底发生了什么?或者,有没有更聪明的方法来做到这一点?就像使用Python 一样?大概$(python -c "print(blablabla about YYYYMMDDHH)")
个?
谢谢!