# gawk -f thisfile // www.merlyn.demon.co.uk >= 2006-11-18 # Uses GMT + 1800s ; therefore, do not use 2330-0030 ; but affected by TZ # For elsewhere, add(E)/subtract(W) winter time offset to ST at * # 1970-2099 only BEGIN { printf "Start\n" for (K=0;K<28*366;K++) { # for test over >28 years ST = systime() + 1800 + K*86400 ; printf "systime() ST = %s\n", ST # * SoD = ST%86400 ; printf "SoD = %s\n", SoD DN = (ST-SoD)/86400 + 365 ; printf "Today Number = %s\n", DN # from 1969-01-01 = 0 DoW = (DN+2)%7 + 1 ; printf "Today Day of Week = %s\n", DoW NT = DN + 4 - DoW ; printf "Go to Nearest Thursday = %s\n", NT X = NT%1461 ; printf "Excess Days over QuadYears = %s\n", X Y4 = (NT-X)/1461 ; printf "QuadYears = %s\n", Y4 D = X%365 ; Y1 = (X-D)/365 ; printf "D = %s Y1 = %s\n", D, Y1 if (Y1==4) { Y1=3 ; D = 365 } ; printf "MoreYears = %s\n", Y1 Yr = 1969 + 4*Y4 + Y1 ; printf "ISO WN Year = %s Day = %s\n", Yr, D+1 Q = D%7 ; WN = (D-Q)/7 + 1 printf "** ISO Week Number = %d-W%02d-%d", Yr, WN, DoW SFT = +strftime("%V", ST) if (SFT!=WN) printf " ****** +strftime('%V', ST) = %d", SFT printf "\n\n" } printf "Lines with ****** show strftime('%v', ST) errors\n\nEnd\n" }