51   type(
dc_cal), 
intent(in), 
optional, 
target:: cal
    60   type(
dc_cal), 
pointer:: calp =>null()
    61   real(DP):: start_year, start_day, start_sec, start_neg_offset_day
    62   real(DP)::   end_year,   end_day,   end_sec,   end_neg_offset_day
    63   integer:: day_in_4years, day_in_400years
    64   integer:: start_year_int, end_year_int
    66   character(*), 
parameter:: subname = 
'DCCalDateDifference1'    71   if ( 
present( cal ) ) 
then    81   if ( .not. calp % initialized ) 
then    86   if ( .not. start_date % initialized ) 
then    91   if ( .not. end_date % initialized ) 
then    96   start_neg_offset_day = 0
    97   end_neg_offset_day   = 0
    99   start_year_int = start_date % year
   100   end_year_int   = end_date % year
   105   select case( calp % cal_type )
   112     do while ( start_year_int < 1 )
   113       start_neg_offset_day =   start_neg_offset_day &
   114         &                    + day_in_4years * 100
   115       start_year_int       =   start_year_int &
   122     if ( ( start_year_int - 1 ) > 4 ) 
then   123       start_day = int( ( start_year_int - 1 ) / 4 ) * day_in_4years
   124       start_year = mod( start_year_int - 1, 4 ) + 1
   127       start_year = start_year_int
   130     start_day = start_day + ( start_year - 1 ) * sum( calp % day_in_month(:) )
   131     do i = 1, start_date % month - 1
   132       if ( start_year == 4 .and. i == 2 ) 
then   133         start_day = start_day + 29
   135         start_day = start_day + calp % day_in_month(i)
   138     start_day = start_day + start_date % day
   142     do while ( end_year_int < 1 )
   143       end_neg_offset_day =   end_neg_offset_day &
   144         &                  + day_in_4years * 100
   145       end_year_int       =   end_year_int &
   152     if ( ( end_year_int - 1 ) > 4 ) 
then   153       end_day = int( ( end_year_int - 1 ) / 4 ) * day_in_4years
   154       end_year = mod( end_year_int - 1, 4 ) + 1
   157       end_year = end_year_int
   160     end_day = end_day + ( end_year - 1 ) * sum ( calp % day_in_month(:) )
   161     do i = 1, end_date % month - 1
   162       if ( end_year == 4 .and. i == 2 ) 
then   163         end_day = end_day + 29
   165         end_day = end_day + calp % day_in_month(i)
   168     end_day = end_day + end_date % day
   172     day_in_400years = 146097
   176     do while ( start_year_int < 1 )
   177       start_neg_offset_day =   start_neg_offset_day &
   179       start_year_int       =   start_year_int &
   186     if ( ( start_year_int - 1 ) > 400 ) 
then   187       start_day = int( ( start_year_int - 1 ) / 400 ) * day_in_400years
   188       start_year = mod( start_year_int - 1, 400 ) + 1
   191       start_year = start_year_int
   194     do j = 1, int( start_year - 1 )
   195       do i = 1, calp % month_in_year
   197           if     ( mod( j, 400 ) == 0 ) 
then   198             start_day = start_day + 29
   199           elseif ( mod( j, 100 ) == 0 ) 
then   200             start_day = start_day + 28
   201           elseif ( mod( j, 4   ) == 0 ) 
then   202             start_day = start_day + 29
   204             start_day = start_day + 28
   207           start_day = start_day + calp % day_in_month(i)
   212     do i = 1, start_date % month - 1
   214         if     ( mod( start_year, 400.0_dp ) == 0 ) 
then   215           start_day = start_day + 29
   216         elseif ( mod( start_year, 100.0_dp ) == 0 ) 
then   217           start_day = start_day + 28
   218         elseif ( mod( start_year, 4.0_dp   ) == 0 ) 
then   219           start_day = start_day + 29
   221           start_day = start_day + 28
   224         start_day = start_day + calp % day_in_month(i)
   228     start_day = start_day + start_date % day
   232     do while ( end_year_int < 1 )
   233       end_neg_offset_day =   end_neg_offset_day &
   235       end_year_int       =   end_year_int &
   242     if ( ( end_year_int - 1 ) > 400 ) 
then   243       end_day = int( ( end_year_int - 1 ) / 400 ) * day_in_400years
   244       end_year = mod( end_year_int - 1, 400 ) + 1
   247       end_year = end_year_int
   250     do j = 1, int( end_year - 1 )
   251       do i = 1, calp % month_in_year
   253           if     ( mod( j, 400 ) == 0 ) 
then   254             end_day = end_day + 29
   255           elseif ( mod( j, 100 ) == 0 ) 
then   256             end_day = end_day + 28
   257           elseif ( mod( j, 4   ) == 0 ) 
then   258             end_day = end_day + 29
   260             end_day = end_day + 28
   263           end_day = end_day + calp % day_in_month(i)
   268     do i = 1, end_date % month - 1
   270         if     ( mod( end_year, 400.0_dp ) == 0 ) 
then   271           end_day = end_day + 29
   272         elseif ( mod( end_year, 100.0_dp ) == 0 ) 
then   273           end_day = end_day + 28
   274         elseif ( mod( end_year, 4.0_dp   ) == 0 ) 
then   275           end_day = end_day + 29
   277           end_day = end_day + 28
   280         end_day = end_day + calp % day_in_month(i)
   284     end_day = end_day + end_date % day
   290     start_day = ( start_year_int - 1 ) * sum( calp % day_in_month(:) )
   291     do i = 1, start_date % month - 1
   292       start_day = start_day + calp % day_in_month(i)
   294     start_day = start_day + start_date % day
   299     end_day = ( end_year_int - 1 ) * sum ( calp % day_in_month(:) )
   300     do i = 1, end_date % month - 1
   301       end_day = end_day + calp % day_in_month(i)
   303     end_day = end_day + end_date % day
   309   start_sec =   ( start_day - 1 - start_neg_offset_day ) &
   310       &                           * calp % hour_in_day &
   311       &                           * calp % min_in_hour &
   312       &                           * calp % sec_in_min  &
   313       &       + start_date % hour * calp % min_in_hour &
   314       &                           * calp % sec_in_min  &
   315       &       + start_date % min  * calp % sec_in_min  &
   321   end_sec =   ( end_day - 1 - end_neg_offset_day ) &
   322       &                       * calp % hour_in_day &
   323       &                       * calp % min_in_hour &
   324       &                       * calp % sec_in_min  &
   325       &     + end_date % hour * calp % min_in_hour &
   326       &                       * calp % sec_in_min  &
   327       &     + end_date % min  * calp % sec_in_min  &
   333   sec = end_sec - start_sec
 
integer, parameter, public cal_gregorian
 
integer, parameter, public unit_symbol_hour
 
integer, parameter, public cal_julian
 
integer, parameter, public unit_symbol_month
 
integer, parameter, public dc_enotinit
 
integer, parameter, public cal_user_defined
 
integer, parameter, public cal_noleap
 
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ 
 
type(dc_cal), target, save, public default_cal
 
character(token) function, public dccaltype_str(cal_type)
 
integer, parameter, public unit_symbol_year
 
subroutine, public storeerror(number, where, err, cause_c, cause_i)
 
integer, parameter, public dc_noerr
 
integer, parameter, public unit_symbol_day
 
integer, parameter, public cal_360day
 
integer, parameter, public dp
倍精度実数型変数 
 
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
 
integer, parameter, public dc_ebadunit
 
integer, parameter, public cal_cyclic
 
integer, parameter, public unit_symbol_min
 
integer function, public dccaldate_str2usym(str)
 
subroutine, public default_cal_set
 
integer, parameter, public unit_symbol_sec
 
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
 
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ