2015-12-22 08:16:28 -0500, Greg Wooledge:
[...]
> t=946702800   # Start at Sat Jan  1 12:00:00 EST 2000
> endyear=2036
> 
> while true; do
>   printf -v year '%(%Y)T' "$t"
>   ((year > endyear)) && break
>   printf -v day  '%(%d)T' "$t"
>   printf -v dow  '%(%w)T' "$t"
>   if [[ $day = 13 && $dow = 5 ]]; then
>     printf -v month '%(%m)T' "$t"
>     echo "$year-$month-$day"
>   fi
>   ((t += 86400))
> done
> 
> But just because it doesn't fork, doesn't mean it's *fast*.  Bash is so
> slow at everything. :(  Your one-fork-per-month loop (plus one fork per
> year) might end up being much faster than my zero-forks-per-day loop.
> Mine is portable, though.
[...]

(assumes a recent version of bash though).

Starting on a Friday and looping with ((t += 7*86400)) and look
for %d == 13 would be more efficient.

TZ=UTC0 perl -MPOSIX -le 'for ($i=86400;$i<2**31;$i+=7*86400) {
@t=gmtime($i); if ($t[3] == 13){print strftime"%c",@t}}'

only takes a few miliseconds here.
-- 
Stephane

Reply via email to