home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Spezial
/
SPEZIAL2_97.zip
/
SPEZIAL2_97.iso
/
ANWEND
/
ONLINE
/
SREFPRC1
/
JULDATE.SRF
< prev
next >
Wrap
Text File
|
1996-07-03
|
3KB
|
77 lines
/***************************************/
/* calculate days based on 0000/01/01 (= 1. day == 1) */
/* INPUT SHOULD BE: YYYYMMDD HR:MINUTE:SECOND */
/* RETURNS # DAYS SINCE 0 0 1 (AND FRACTION OF DAY) */
/* THE heart of this routine from the DATERGF function written by:
Rony G. Flatscher,
Wirtschaftsuniversität/Vienna
Rony.Flatscher@wu-wien.ac.at
*/
sref_JULDATE:
PARSE upper ARG mode, atime
if abbrev(mode,'F') then do /* yy/mm/dd/hh/mm/ss mode */
atime=translate(atime,' ','\/')
parse var atime year month day hr minute second
year=1900+year
end
else do
PARSE VAR atime 1 year 5 month 7 day 9 TIME
PARSE VAR TIME HR ":" MINUTE ":" SECOND .
end
if second="" then second=0
/* build monthdays array */
numeric digits 11
monthdays.1 = 31 ; monthdays.2 = 28 ; monthdays.3 = 31
monthdays.4 = 30 ;monthdays.5 = 31 ; monthdays.6 = 30
monthdays.7 = 31; monthdays.8 = 31 ;monthdays.9 = 30
monthdays.10 = 31; monthdays.11 = 30 ; monthdays.12 = 31
days_1 = year * 365
leap_days = year % 4
IF year > 0 THEN
DO
leap_days = leap_days + 1 /* account for leap year in 0000 */
IF year > 1582 THEN days_1 = days_1 - 10 /* account for 1582, which had 10 days less */
IF year > 1600 THEN /* account for Gregorian calender */
DO
diff = year - 1600
leap_days = leap_days - (diff % 100 - diff % 400)
leap_year = (((diff // 4) = 0) & \((diff // 100) = 0)) | ((diff // 400)=0) /* leap year in hand ? */
END
ELSE leap_year = ((year // 4) = 0) /* leap year in hand ? */
leap_days = leap_days - leap_year
END
/* is year a leap year ? */
IF year > 1582 THEN /* Gregorian calender */
leap_year = (((year // 4) = 0) & \((year // 100) = 0)) | ((year // 400)=0)
ELSE leap_year = (year // 4) = 0 /* Julian calender */
monthdays.2 = 28 + leap_year
IF year = 1582 THEN monthdays.10 = 21 /* 1582: October just had 21 days */
result_function = 0
DO i = 1 TO month - 1
result_function = result_function + monthdays.i
END
IF year = 1582 & month = 10 & day > 4 THEN day = day - 10 /* Gregorian: 10 days too many */
days_2 = result_function + day
T1=(((HR*60)+MINUTE)*60)+SECOND
T2=3600*24
FRACT=T1/T2
jd= (days_1 + leap_days + days_2 + FRACT )
/*say mode year month day hr minute second " , " jd */
return jd