[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Only one Friday 13th coming in 2016
From: |
Stephane Chazelas |
Subject: |
Re: Only one Friday 13th coming in 2016 |
Date: |
Tue, 22 Dec 2015 14:18:00 +0000 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
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