59 lines
1.5 KiB
Fortran
59 lines
1.5 KiB
Fortran
|
||
!日期转为数值,与matlab中Datenum函数相同
|
||
|
||
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年个数146097
|
||
day2 = int(((date(:,1)-1)-day1*400)/100) !剩余100年的个数
|
||
day3 = int(((date(:,1)-1)-day1*400-day2*100)/4) !剩余4年的个数
|
||
day4 = int((date(:,1)-1)-day1*400-day2*100-day3*4) !剩余1年的个数
|
||
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 |