使用BASH我想以十分钟的间隔从开始到结束日期循环。 我试过了
begin_date="2015-01-01 00:00:00"
end_date="2015-02-20 00:00:00"
d=$begin_date
while [ "$d" != "$end_date" ]; do
echo $d
d=$(date -d "${d} + 10 min" +"%Y-%m-%d %H:%M")
done
但它没有用。看Bash:Looping thru dates
#This works
d=$(date -I -d "${d} + 1 day")
#This doesn't work
d=$(date -d "${d} + 1 day" +"%Y-%m-%d")
格式字符串中缺少什么?
答案 0 :(得分:2)
表达式CMTime start = CMTimeMakeWithSeconds(1.0, 600);
CMTime duration1 = CMTimeMakeWithSeconds(1.7, 600);
CMTimeRange range = CMTimeRangeMake(kCMTimeZero, duration1);
似乎不会产生偏移量为10分钟的日期。实际上,当我运行你的代码时,我会看到一个日期计数器向后移动。(将此诊断作为问题的一部分发布将有助于其他人查看问题所在;您不应该要求其他人运行您的代码只是为了看它的作用。)
无论如何,这样做的理智方法是将日期转换为Unix epoch,然后从那里取出。
date -d "${d} + 10 min"
在shell中进行日期算术可能效率很低;将其转换为例如如果觉得它太迟钝或需要多次运行,那么Awk或Perl可能值得你花时间。
答案 1 :(得分:1)
您链接的示例需要稍微调整一下:
#!/bin/bash
## User-specified dates.
# See [GNU Coreutils: Date] for more info
# [GNU Coreutils: Date]: https://www.gnu.org/software/coreutils/manual/html_node/Combined-date-and-time-of-day-items.html#Combined-date-and-time-of-day-items
begin_date="2015-01-01T00:00"
end_date="2015-01-01T00:40"
# Run through `date` to ensure iso-8601 consistency
startdate=$(date --iso-8601='minutes' --date="${begin_date}")
enddate=$(date --iso-8601='minutes' --date="${end_date}")
# Do loop
d="$startdate"
while [ "$d" != "$enddate" ]; do
echo $d
d=$(date --iso-8601='minutes' --date="$d + 10 minutes")
done
请注意,选项-I
和-d
分别相当于--iso-8601
和--date
。