Last Friday of each month: Difference between revisions

Content added Content deleted
m (→‎{{header|Java}}: Nicer look, makes fewer assumptions about the values for the months in Calendar)
(shell code)
Line 359: Line 359:
d
d
end</lang>
end</lang>

=={{header|Shell Bourne}}==

<lang sh>
#!/bin/sh

# Free code, no limit work
# $Id: lastfridays,v 1.1 2011/11/10 00:48:16 gilles Exp gilles $

# usage :
# lastfridays 2012 # prints last fridays of months of year 2012

debug=${debug:-false}
#debug=true

epoch_year_day() {
#set -x
x_epoch=`expr ${2:-0} '*' 86400 + 43200`
date --date="${1:-1970}-01-01 UTC $x_epoch seconds" +%s
}

year_of_epoch() {
date --date="1970-01-01 UTC ${1:-0} seconds" +%Y
}
day_of_epoch() {
LC_ALL=C date --date="1970-01-01 UTC ${1:-0} seconds" +%A
}
date_of_epoch() {
date --date="1970-01-01 UTC ${1:-0} seconds" "+%Y-%m-%d"
}
month_of_epoch() {
date --date="1970-01-01 UTC ${1:-0} seconds" "+%m"
}

last_fridays() {
year=${1:-2012}

next_year=`expr $year + 1`
$debug && echo "next_year $next_year"

current_year=$year
day=0
previous_month=01

while test $current_year != $next_year; do

$debug && echo "day $day"

current_epoch=`epoch_year_day $year $day`
$debug && echo "current_epoch $current_epoch"

current_year=`year_of_epoch $current_epoch`

current_day=`day_of_epoch $current_epoch`
$debug && echo "current_day $current_day"

test $current_day = 'Friday' && current_friday=`date_of_epoch $current_epoch`
$debug && echo "current_friday $current_friday"

current_month=`month_of_epoch $current_epoch`
$debug && echo "current_month $current_month"

# Change of month => previous friday is the last of month
test "$previous_month" != "$current_month" \
&& echo $previous_friday
previous_month=$current_month
previous_friday=$current_friday
day=`expr $day + 1`
done
}

# main
last_fridays ${1:-2012}

</lang>

Sample execution:
<pre>
lastfridays 2012
2012-01-27
2012-02-24
2012-03-30
2012-04-27
2012-05-25
2012-06-29
2012-07-27
2012-08-31
2012-09-28
2012-10-26
2012-11-30
2012-12-28
</pre>


=={{header|Tcl}}==
=={{header|Tcl}}==