给定月/年的最后一个星期六

时间:2012-05-03 17:08:39

标签: linux unix cal

在Unix中,我想查找给定月份和年份的最后一个星期六的日期(星期几)。我知道cal会给我一个月/年的日历。获得上周六的好方法是什么?

更新:我想要一个可以用来申请一周中任何一天的解决方案。例如,我可以使用相同的方法查找上周日或周三的日期。

3 个答案:

答案 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月),这是最后一次出现的最早日期。星期六。