! This file: http://ftp.aset.psu.edu/pub/ger/fortran/hdk/estdst,f90 ! !====Compute date for year, YYYY, for changing clocks to DST and EST. ! Since 1966, most of the United States has observed Daylight ! Saving Time on the first Sunday of April until the last Sunday ! of October. Beginning in 2007, most of the U.S. will begin Daylight ! Saving Time on the second Sunday in March and revert back to ! Standard Time on the first Sunday in November. In the U.S. ! each time zone switches to and from DST at a different time. ! hdk - 30 November 2006 CHARACTER(60) LINE INTEGER YYYY,MM,DD,I,WEEKDAY, EOF INTEGER, DIMENSION(8) :: VAL !------WEEKDAY Gives the weekday number 0=SUNDAY, 1=MONDAY, ! ... 6=SATURDAY. WEEKDAY(YYYY,MM)=MOD((13*(MM+10-(MM+10)/13*12)-1)/5+DD+77 & +5*(YYYY+(MM-14)/12-(YYYY+(MM-14)/12)/100*100)/4 & + (YYYY+(MM-14)/12)/400-(YYYY+(MM-14)/12)/100*2,7) 1 WRITE(*,*) 'Please enter a four-digit year (YYYY) > 1965;' WRITE(*,*) ' or press Enter for current year:' READ(*,'(A)',IOSTAT=EOF) LINE IF (EOF.EQ.0 .AND. LINE .NE.'') THEN READ(LINE,*) YYYY ELSE ! If no year entered, then compute date this year. CALL DATE_AND_TIME(VALUES=VAL) YYYY = VAL(1) ENDIF ! Compute Eastern Standard and Daylight Savings Time Change. IF (YYYY .LT. 1966) GOTO 1 IF (YYYY .LT. 2007) THEN MM=10 ! EST on October 2006 and before. DO I=31,26,-1 ! Look backwards for the last Sunday in October. DD=I IF (WEEKDAY(YYYY,MM) .EQ. 0) THEN WRITE(*,*) 'Turn Clocks back to EST on: ',I,' October ',YYYY EXIT ENDIF END DO MM=4 ! DST on April 2006 and before. DO I=1,7 ! Look for first Sunday in April. DD=I IF (WEEKDAY(YYYY,MM) .EQ. 0) THEN WRITE(*,*) 'Turn Clocks forward to DST on: ',I,' April', YYYY EXIT ENDIF END DO ELSE MM=11 ! EST on November 2007 and after. DO I=1,7 ! Look for first Sunday in November. DD=I IF (WEEKDAY(YYYY,MM) .EQ. 0) THEN WRITE(*,*) 'Turn Clocks back to EST on: ',I,' November ',YYYY EXIT ENDIF END DO MM=3 ! DST on March 2007 and after. DO I=14,1,-1 ! Look for second Sunday in March DD=I IF (WEEKDAY(YYYY,MM) .EQ. 0) THEN WRITE(*,*) 'Turn Clocks forward to DST on: ',I,' March ',YYYY EXIT ENDIF END DO ENDIF STOP END