Linux下如何将date()命令输出时间向下取整到最近15分钟间隔
原代码问题原因
- 调用了两次
date命令,如果两次调用的间隙刚好跨了分钟、小时甚至天,会出现前后时间不匹配的异常 - 算术运算输出的分钟数是数字类型,小于10时不会自动补前导零,因此每小时1-14分钟区间会输出
0而非预期的00
修复方案
方案1:最小改动修复补零问题
仅在原代码基础上用printf格式化补前导零即可,改动最小:
printf "%s%02d\n" "$(date +'%Y/%m/%d/%H/')" $(( $(date +%M) / 15 * 15 ))
其中%02d表示输出2位数字,不足2位时自动在前面补0。
方案2:更可靠的时间戳取整实现(推荐)
通过时间戳取整的方式仅调用1次date即可实现,完全避免两次取时间不一致的问题,代码也更简洁:
适用GNU Date(绝大多数Linux发行版)
date +'%Y/%m/%d/%H/%M' -d "@$(( $(date +%s) / 900 * 900 ))"
适用BSD Date(macOS/BSD系统)
date -r $(( $(date +%s) / 900 * 900 )) +'%Y/%m/%d/%H/%M'
实现逻辑:15分钟对应900秒,先将当前时间转换为秒级时间戳,对900做整数除法后再乘900,就能得到最近的向下对齐15分钟的时间戳,再格式化输出即可,天然自带分钟补零效果。
内容的提问来源于stack exchange,提问作者NoName
相关产品推荐
相关产品推荐

