; ; PURPOSE: Calculate date and time that correspond to a fractional crn:Cl0 ; CALLING SEQUENCE : ; datetime_scrncl0_200905,crn,cl0,reso=,year,month,day,hh,mm,ss,/dtl ; IUPUT: crn,cl0,reso= ; OUTPUT: year,month,day,hh,mm,ss,/dtl ; MODIFICATION HISTORY : ; First version: 20090531 by X. Zhao based on datetime_scrncl0.pro ; 20060327 by X. Zhao ; pro datetime_scrncl0_200905,crn,cl0,RESO=reso,cl0i,year,month,day1,DTL=dtl if N_params() LT 1 then begin print,'datetime_scrncl0_200905,crn,cl0,reso=,cl0i,year,month,day1,/dtl' print,"crn=2081 & cl0=180.50" print,"resolution of 600sec., 60sec, 10sec and 1sec" return endif CASE 1 OF reso eq 360: lim=0.166667 reso eq 100: lim=0.05 reso eq 60: lim=0.0166667 reso eq 10: lim=0.00277778 reso eq 1: lim=0.000277778 ENDCASE scrncl0=STRTRIM(crn,2)+':'+STRTRIM(FIX(cl0),2) spawn,'times ct'+scrncl0+' > outdata.d' date0=' ' get_lun,unit openr,unit,'outdata.d' readf,unit,date0 free_lun,unit spawn,'rm outdata.d' year = fix(strmid(date0,0,4)) month = fix(strmid(date0,5,2)) day = fix(strmid(date0,8,2)) hrs00=FIX(STRMID(date0,11,2)) hrs01=FIX(STRMID(date0,15,2))/60.+FIX(STRMID(date0,19,2))/3600. hrs0=hrs00+hrs01 days0=day+hrs0/24. cl0_yyyymmddtime,year,month,day,hrs0,cl0i dcl=cl0i-cl0 if ABS(dcl) gt 100 then cl0i=cl0i+360 dcl=cl0i-cl0 if keyword_set(dtl) then begin print,'date0,hrs0:',date0,hrs0 print,'cl0,First cl0i:',cl0,cl0i endif CASE 1 OF ; Case 1 dcl gt lim: begin if hrs00 eq 23 then begin day=day+1 hrs0=hrs01 hrs=hrs0 endif else hrs=hrs0 lbl1: hrs=hrs+lim ;hrs=hrs+1. cl0_yyyymmddtime,year,month,day,hrs,cl0i dcl=cl0i-cl0 if ABS(dcl) gt 100 then cl0i=cl0i+360 dcl=cl0i-cl0 if keyword_set(dtl) then print,'C1-cl0i,dcl:',cl0i,dcl CASE 1 OF dcl gt lim: goto, lbl1 dcl lt -lim: begin lbl2: hrs=hrs-lim cl0_yyyymmddtime,year,month,day,hrs,cl0i dcl=cl0i-cl0 if keyword_set(dtl) then print,'C1-cl0i,dcl:',cl0i,dcl if dcl lt -lim then goto, lbl2 $ else day1=day+hrs/24. end else: day1=day+hrs/24. ENDCASE end ; Case 2 dcl lt -lim: begin if hrs00 eq 0 then begin day=day-1 hrs0=24+hrs01 hrs=hrs0 endif else hrs=hrs0 lbl3: hrs=hrs-lim cl0_yyyymmddtime,year,month,day,hrs,cl0i dcl=cl0i-cl0 if keyword_set(dtl) then print,'C2-day,hrs,cl0i,dcl:',day,hrs,cl0i,dcl CASE 1 OF dcl lt -lim: goto, lbl3 dcl gt lim: begin ; hrs=hrs+1. lbl4: hrs=hrs+lim cl0_yyyymmddtime,year,month,day,hrs,cl0i dcl=cl0i-cl0 if keyword_set(dtl) then print,'C2-day,hrs,cl0i,dcl:',day,hrs,cl0i,dcl if dcl gt lim then goto, lbl4 $ else day1=day+hrs/24. end else: day1=day+hrs/24. ENDCASE end else: day1=day+hrs0/24. ENDCASE hrs1=(day1-day)*24. hh=FIX(hrs1) & mm=FIX((hrs1-hh)*60) & ss=FIX((hrs1-hh)*3600-mm*60) if hh eq 24 then begin day=day+1 hh=0 endif if keyword_set(dtl) then begin date_year_sec,year,month,day,hh,mm,ss,date1 print,'Orig. cl0 and date0 from times:',cl0,' ',date0 print,'Last cl0i and date1 :',cl0i,' ',date1 endif end