如何使用GNU date命令在Bash中查找指定月份内第N个特定星期几的日期
如何使用GNU date命令在Bash中查找指定月份内第N个特定星期几的日期
嘿,这个问题我刚好研究过,GNU date其实有非常便捷的内置语法来解决这个问题,不用手动算几周那么麻烦~
你之前尝试的20221001+next sunday格式不对,GNU date的相对偏移需要用空格和日期分隔开,而且它直接支持识别“第N个星期几”的表述,完全不用自己累加周数。
核心用法
要查找指定月份的第N个特定星期几,通用命令格式如下:
date +%Y%m%d -d "<年份>-<月份> <第N个> <星期几>"
或者也可以基于当月第一天来写,效果完全一样:
date +%Y%m%d -d "<年份>-<月份>-01 + <第N个> <星期几>"
这里的<第N个>可以是first、second、third、fourth、fifth,甚至last(用来找当月最后一个指定星期几)。
实际例子
比如你要找2022年10月的第三个周日,直接执行:
date +%Y%m%d -d "2022-10 third sunday"
执行后会输出20221016,这正是2022年10月的第三个周日。
再举几个其他场景的例子:
- 2023年3月的第二个周五:
date +%Y%m%d -d "2023-03 second friday" - 2024年2月的最后一个周四:
date +%Y%m%d -d "2024-02 last thursday"
为什么你的之前的方法可能出错
你之前想的20221001+next sunday+2 weeks这种写法,会存在一个问题:如果当月1号本身就是周日,那next sunday会是8号,再加两周就是22号,但实际上当月第三个周日应该是15号。而用GNU date的<Nth> <weekday>语法,它会自动识别当月内的第N个目标星期几,不管当月第一天是星期几,结果更准确。
备注:内容来源于stack exchange,提问作者ClimateUnboxed
相关产品推荐
相关产品推荐

