在Unix中,我想查找给定月份和年份的最后一个星期六的日期(星期几)。我知道cal
会给我一个月/年的日历。获得上周六的好方法是什么?
更新:我想要一个可以用来申请一周中任何一天的解决方案。例如,我可以使用相同的方法查找上周日或周三的日期。
答案 0 :(得分:3)
使用awk。考虑一下:
cal 5 2013 | awk 'NF>6{a=$7} END{print a}'
25
答案 1 :(得分:0)
如果您不想只管道/解析cal
输出,可以使用algorithm to determine the weekday of a date,然后获取12月31日的工作日并向后移动所需的天数星期六。
但解析cal可能更简单。
答案 2 :(得分:0)
我对这个问题有另一个答案,这是一个有点冗长的Bash脚本,效率不高,但很容易理解。基本思路是在给定月份和年份的22天到31天之间循环,并通过nav
检查每一天的每一天。返回所需工作日(例如星期六)的最后一天存储在变量<div class="collapse navbar-collapse navbar-ex1-collapse">
<div class="nav navbar-nav navbar-left">
<div class="input-group navbar-form navbar-center">
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div><!-- /btn-group -->
<input type="text" class="form-control" aria-label="...">
</div><!-- /input-group -->
</div>
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><span class="glyphicon glyphicon-user"></span></a></li>
<li><a href="#"><span class="glyphicon glyphicon-shopping-cart"></span></a></li>
</ul>
</div>
中,该变量将包含循环后的结果。
date +'%u'
我们通过检查RESULT_DAY
的值“0”来检查#!/bin/bash
DAY_OF_WEEK=6 # 1=Monday, ..., 7=Sunday
THE_YEAR=2016
THE_MONTH=10
RESULT_DAY=0
YEAR_MONTH_STR=${THE_YEAR}"-"${THE_MONTH} # Example value: "2016-10"
for DAYNO in 22 23 24 25 26 27 28 29 30 31
do
DATE_TO_CHECK=${YEAR_MONTH_STR}"-"${DAYNO}
DATE_RESULT=$(date --date=$DATE_TO_CHECK '+%u')
if [ $? -eq 0 ]
then
if [ $DATE_RESULT -eq $DAY_OF_WEEK ]
then
RESULT_DAY=$DAYNO
fi
fi
done
RESULT_DATE_COMPLETE=${YEAR_MONTH_STR}"-"${RESULT_DAY}
echo -e "\nResult date (YYYY-MM-DD): "$(date --date=$RESULT_DATE_COMPLETE +'%Y-%m-%d (%A)')
的结果代码,因此我们可以忽略非法日期(例如2月31日,这不是存在)。
一个月的第22天是我们必须考虑的最早日期,因为在最短的一个月(非闰年的2月),这是最后一次出现的最早日期。星期六。