00001
00002
00003
00004 subroutine get_date (date_str)
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 implicit none
00022 character*(*) date_str
00023 integer year,hour, minute,sec, half, iday,imon, dstat,tstat,
00024 & nday, lmonth(12), lday(31), len1, len2, len3, lenstr
00025 character*3 ampm(0:1)
00026 character*9 day(0:6), month(12)
00027 data lmonth/7,8,5,5,3,4,4,6,9,7,8,8/ ampm/' AM',' PM'/
00028 & lday /9*1,22*2/ day /'Sunday ', 'Monday ', 'Tuesday ',
00029 & 'Wednesday', 'Thursday ', 'Friday ', 'Saturday '/
00030 & month/'January ', 'February ', 'March ', 'April ',
00031 & 'May ', 'June ', 'July ', 'August ',
00032 & 'September', 'October ', 'November ', 'December '/
00033 character*11 ctime*11, today*18, fmt*20, wkday*44
00034
00035 #if defined cray
00036 integer century
00037 parameter (century=1900)
00038 character*8 tstring
00039 #elif defined sun || defined sgi || defined DECALPHA
00040 character*3 day3, mon
00041 character*28 fdate, tmpday
00042 #elif defined AIX
00043 character*3 day3, mon
00044 character*28 tmpday
00045 #endif
00046
00047
00048
00049
00050 #if defined vax
00051 dstat=0
00052 call idate (imon,nday,year)
00053 year=year+century
00054 call time (tstring)
00055 read(tstring,'(i2,1x,i2,1x,i2)',iostat=tstat) hour, minute, sec
00056 if(tstat.ne.0) ctime=tstring
00057 #elif defined cray
00058 write(tstring,'(a8)') date()
00059 read(tstring,'(i2,1x,i2,1x,i2)',iostat=dstat) imon, nday, year
00060 year=year+century
00061 if(dstat.ne.0) then
00062 wkday=tstring
00063 today=' '
00064 endif
00065 write(tstring,'(a8)') clock()
00066 read(tstring,'(i2,1x,i2,1x,i2)',iostat=tstat) hour, minute, sec
00067 if(tstat.ne.0) ctime=tstring
00068 #elif defined sun || defined sgi || defined DECALPHA
00069 tmpday=fdate()
00070 read(tmpday,'(a3,1x,a3,1x,i2)',iostat=dstat) day3, mon, nday
00071 read(tmpday,'(11x,i2,1x,i2,1x,i2)',iostat=tstat)hour,minute,sec
00072 tstat=max(abs(dstat),abs(tstat))
00073 read(tmpday,'(20x,i4)',iostat=dstat) year
00074 if(dstat.ne.0 .or. tstat.ne.0) then
00075 dstat=1
00076 tstat=1
00077 wkday=tmpday
00078 today=' '
00079 ctime=' '
00080 endif
00081 #elif defined AIX
00082 call fdate_(tmpday)
00083 read(tmpday,'(a3,1x,a3,1x,i2)',iostat=dstat) day3, mon, nday
00084 read(tmpday,'(11x,i2,1x,i2,1x,i2)',iostat=tstat)hour,minute,sec
00085 tstat=max(abs(dstat),abs(tstat))
00086 read(tmpday,'(20x,i4)',iostat=dstat) year
00087 if((dstat.ne.0).or.(tstat.ne.0)) then
00088 dstat=1
00089 tstat=1
00090 wkday=tmpday
00091 today=' '
00092 ctime=' '
00093 endif
00094 #else
00095 hour=0
00096 minute=0
00097 sec=0
00098 nday=1
00099
00100 dstat=1
00101 tstat=1
00102 wkday=' '
00103 today=' '
00104 ctime=' '
00105 #endif
00106 if (tstat.eq.0) then
00107 half=hour/12
00108 hour=hour-half*12
00109 if (hour.eq.0) hour=12
00110 if (half.eq.2) half=0
00111 endif
00112 if (dstat.eq.0) then
00113 #if defined vax || defined cray
00114
00115 call day_code (imon,nday,year,iday)
00116
00117 #elif defined sun || defined sgi || defined AIX || defined DECALPHA
00118
00119
00120 iday=0
00121 do while ((day3.ne.day(iday)(1:3)).and.(iday.lt.6))
00122 iday=iday+1
00123 enddo
00124
00125 imon=1
00126 do while ((mon.ne.month(imon)(1:3)).and.(imon.lt.12))
00127 imon=imon+1
00128 enddo
00129 #endif
00130
00131
00132
00133 write(fmt,10) lmonth(imon), lday(nday)
00134 10 format('(a',i1,',1x,i',i1,',1h,,1x,i4)')
00135 write(today,fmt) month(imon),nday,year
00136 wkday=day(iday)
00137 endif
00138 if(tstat.eq.0) then
00139 write(ctime,20) hour, minute, sec, ampm(half)
00140 20 format(i2,':',i2.2,':',i2.2,a3)
00141 endif
00142
00143 len1=lenstr(wkday)
00144 len2=lenstr(today)
00145 len3=lenstr(ctime)
00146 date_str=wkday(1:len1)
00147 if (len2.gt.0) then
00148 len1=lenstr(date_str)
00149 date_str=date_str(1:len1)/ /' - '/ /today(1:len2)
00150 endif
00151 if (len3.gt.0) then
00152 len1=lenstr(date_str)
00153 date_str=date_str(1:len1)/ /' - '/ /ctime(1:len3)
00154 endif
00155 return
00156 end
00157
00158
00159 #if defined vax || defined cray
00160
00161 subroutine day_code (month,day,year,code)
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 implicit none
00184 logical leap_year
00185 integer month, day, year, code, base_cen, base_qcen, i,
00186 & base_qyear, base_year, bym1_dec31, feb_end, leap,
00187 & no_day, no_yr, nqy, nyc, nyqc, month_day(12)
00188 parameter (base_cen=1700, base_qcen=1600, base_qyear=1748,
00189 & base_year=1752, bym1_dec31=5, feb_end=59)
00190 data month_day /31,28,31,30,31,30,31,31,30,31,30,31/
00191
00192
00193
00194
00195
00196 no_yr=year-base_year
00197 nqy=year-base_qyear
00198 nyc=year-base_cen
00199 nyqc=year-base_qcen
00200
00201
00202
00203
00204 leap=nqy/4-nyc/100+nyqc/400
00205 leap_year=(mod(nqy,4).eq.0 .and. mod(nyc,100).ne.0)
00206 & .or. mod(nyqc,400).eq.0
00207
00208
00209
00210
00211
00212 no_day=day
00213 do i=1,month-1
00214 no_day=no_day+month_day(i)
00215 enddo
00216 if (leap_year .and. no_day.le.feb_end) no_day=no_day-1
00217 if (leap_year .and. month.eq.2 .and. day.eq.29) no_day=no_day-1
00218
00219
00220
00221
00222
00223 no_day=mod(no_day,7)+mod(leap,7)+mod(no_yr,7)+bym1_dec31
00224
00225
00226
00227 code=mod(no_day,7)
00228 return
00229 end
00230 #endif