SUB_WAVELET/Fortran/SUB_Date_to_Num.f90

59 lines
1.5 KiB
Fortran
Raw Normal View History

2025-04-17 11:06:03 +08:00
!<21><><EFBFBD><EFBFBD>תΪ<D7AA><CEAA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>matlab<61><62>Datenum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
subroutine Date_to_Num(date,N,OutLine)
implicit none
integer :: date(1000,5)
integer :: N
real*8 :: OutLine(1000)
real*8 :: day1(1000),day2(1000),day3(1000),day4(1000)
real*8 :: day(1000)
integer :: i
day1 = 0
day2 = 0
day3 = 0
day4 = 0
day = 0
day1 = int((date(:,1)-1)/400) !400<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>146097
day2 = int(((date(:,1)-1)-day1*400)/100) <><CAA3>100<30><30><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
day3 = int(((date(:,1)-1)-day1*400-day2*100)/4) <><CAA3>4<EFBFBD><34><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
day4 = int((date(:,1)-1)-day1*400-day2*100-day3*4) <><CAA3>1<EFBFBD><31><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
day = 366+day1*146097+day2*36524+day3*1461+day4*365
do i=1,N
select case(date(i,2))
case(2)
day(i) = day(i)+31
case(3)
day(i) = day(i)+59
case(4)
day(i) = day(i)+90
case(5)
day(i) = day(i)+120
case(6)
day(i) = day(i)+151
case(7)
day(i) = day(i)+181
case(8)
day(i) = day(i)+212
case(9)
day(i) = day(i)+243
case(10)
day(i) = day(i)+273
case(11)
day(i) = day(i)+304
case(12)
day(i) = day(i)+334
end select
if(day4(i)==3.and.(.not.(day3(i)==24.and.day2(i)/=3)).and.date(i,2)>2) then
day(i) = day(i)+1
end if
end do
day = day+date(:,3)+date(:,4)/24.0+date(:,5)/1440.0
day(N+1:) = 0.0
OutLine = day
end subroutine