In article <[log in to unmask]>,
Stan Sieler <[log in to unmask]> wrote:
[snip]
>
>For example, many people have code that calculates the "day-of-week"
>for a given date ... using an algorithm that breaks down after 1999-12-31.
>(Euler's?) No line-by-line analysis by a programmer will find that
>problem if they don't know it exists!
I don't mean to seem naive, but could someone provide me a copy of Euler's
algorithm. To be honest, I reinvented the wheel when trying to come up with a
command file that did day of week calculations and came up with the following,
if it is wrong I hope someone will correct me.
PARM p1="!hpmonth" p2="!hpdate" p3="19!hpyear"
SETVAR _dow_month ![UPS("!p1")]
SETVAR _dow_day ![UPS("!p2")]
SETVAR _dow_year ![LFT("19!hpyear",4-LEN("!p3"))+"!p3"]
SETVAR _dow_days "Sun Mon Tues WednesThurs Fri Satur "
SETVAR _dow_xyear _dow_year-((12-_dow_month)/10)
SETVAR _dow_xmonth _dow_month+(((12-_dow_month)/10)*12)
SETVAR _dow_xday _dow_day+(_dow_xmonth*2)+(((_dow_xmonth+1)*6)/10)
SETVAR _dow_leap_year (_dow_xyear/4) - (_dow_xyear/100) + (_dow_xyear/400)
SETVAR _dow_xday (_dow_xday+_dow_xyear+_dow_leap_year+1) MOD 7
SETVAR _dow_xdays STR(_dow_days,_dow_xday*6+1,6)
ECHO Date = !_dow_month/!_dow_day/!_dow_year
ECHO Day of week = !_dow_xday
ECHO Day name = ![RTRIM(_dow_xdays)]day
DELETEVAR _dow_@
It seems to work. While we're at it, would someone mind commenting on my day
of
year command file as well? Here that one is.
PARM p1="" p2="" p3="!hpyear"
SETVAR month ![UPS("!p1")]
SETVAR day ![UPS("!p2")]
SETVAR year ![LFT("19!hpyear",4-LEN("!p3"))+"!p3"]
SETVAR doy_days ((month-1)*304/10)+((month+2)/10)+(((12-month)/10)*month)
SETVAR doy_ly (1/(1+(year MOD 4)))-(1/(1+(year MOD 100)))
SETVAR doy_ly (doy_ly+(1/(1+(year MOD 400))))*((7+month)/10)
SETVAR doy_days doy_days+doy_ly+(day-1)
ECHO Day of year for !month/!day/!year is !doy_days
DELETEVAR doy_@
These are both very old routines (about 7 years if I remember right), and I
think they work, but to be honest, I am not sure how to test them. To date all
I have done is random sampling testing and they both seem fine, for both the
19xx and 20xx years (I'm not going to bother with 21xx for obvious reasons :))
To be honest, I thought about submitting these to Interex, but they seemed so
simple I didn't want to embarrass myself by submitting something this trivial.
Any response is welcome, especially if there is Pascal or C code involved.
-------------------------------------------------------------------
Michael P. Smith [log in to unmask]
HP Sr. Systems Programmer [log in to unmask]
Hertz Corporation, Oklahoma City, OK
-------------------------------------------------------------------
Manager: My boss says we need some eunuch programmers
Dilbert: I think he means UNIX and I already know UNIX.
Manager: If the company nurse drops by, tell her I said 'Never mind.'
-------------------------------------------------------------------
The views and opinions expressed in this document are expressly
my own. So get off the couch, I obviously need more help than you.
|