dcdatetimegt.f90
Go to the documentation of this file.
1 != 利用者定義演算子 (>) のための関数
2 != Functions for user defined operation (>)
3 !
4 ! Authors:: Yasuhiro MORIKAWA
5 ! Version:: $Id: dcdatetimegt.f90,v 1.1 2009-05-25 10:01:34 morikawa Exp $
6 ! Tag Name:: $Name: $
7 ! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
8 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
9 !
10  logical function dcdatetime_gt_tt(time1, time2) result(result)
11  !
12  ! 2 つの引数の日時を比較します.
13  ! 1 つ目の引数に格納される日時が 2 つ目の引数に格納される日時
14  ! よりも進んでいる場合, .true. が返ります.
15  !
18  use dc_scaledsec, only: dc_scaled_sec, &
19  & operator(==), operator(<), operator(>), operator(<=), operator(>=), &
20  & operator(+), operator(-), operator(*), operator(/), &
21  & modulo, int, abs, sign
22  implicit none
23  type(dc_datetime), intent(in):: time1, time2
24  type(dc_scaled_sec):: year1, year2, time1_sec, time2_sec
25  continue
26  call eval(time1, sclyear=year1)
27  call eval(time2, sclyear=year2)
28  if (year1 > year2) then
29  result = .true.
30  elseif (year1 < year2) then
31  result = .false.
32  else
33  time1_sec = evalsclsec(time1) + evalsclsec(zonetodiff(time1 % zone))
34  time2_sec = evalsclsec(time2) + evalsclsec(zonetodiff(time2 % zone))
35  if (time1_sec > time2_sec) then
36  result = .true.
37  else
38  result = .false.
39  end if
40  end if
41  end function dcdatetime_gt_tt
42 
43  logical function dcdatetime_gt_ff(diff1, diff2) result(result)
44  !
45  ! 2 つの引数の日時差を比較します.
46  ! 1 つ目の引数に格納される日時差が 2 つ目の引数に格納される日時差
47  ! よりも大きい場合, .true. が返ります.
48  !
49  use dc_date_generic, only: evalsec
50  use dc_date_types, only: cyclic_mdays
51  use dc_scaledsec, only: &
52  & operator(<), operator(>), operator(<=), operator(>=), operator(==)
54  implicit none
55  type(dc_difftime), intent(in):: diff1, diff2
56  continue
57  if ( diff1 % day_seconds == diff2 % day_seconds ) then
58 
59  if ( diff1 % mon > diff2 % mon ) then
60  result = .true. ; return
61  elseif ( diff1 % mon < diff2 % mon ) then
62  result = .false. ; return
63  end if
64  if ( diff1 % day > diff2 % day ) then
65  result = .true. ; return
66  elseif ( diff1 % day < diff2 % day ) then
67  result = .false. ; return
68  end if
69  if ( diff1 % sec > diff2 % sec ) then
70  result = .true. ; return
71  elseif ( diff1 % sec < diff2 % sec ) then
72  result = .false. ; return
73  end if
74  result = .false.
75  else
76 
77  if (evalsec(diff1) > evalsec(diff2)) then
78  result = .true.
79  else
80  result = .false.
81  end if
82  end if
83  end function dcdatetime_gt_ff
84 
85  logical function dcdatetime_gt_fi(diff, factor) result(result)
86  !
87  ! 2 つの引数の日時差を比較します.
88  ! 1 つ目の引数に格納される日時差が 2 つ目の引数に格納される日時差
89  ! よりも大きい場合, .true. が返ります.
90  !
91  use dc_date_generic, only: evalsec
93  implicit none
94  type(dc_difftime), intent(in):: diff
95  integer, intent(in):: factor
96  continue
97  result = evalsec(diff) > factor
98  end function dcdatetime_gt_fi
99 
100  logical function dcdatetime_gt_if(factor, diff) result(result)
101  !
102  ! 2 つの引数の日時差を比較します.
103  ! 1 つ目の引数に格納される日時差が 2 つ目の引数に格納される日時差
104  ! よりも大きい場合, .true. が返ります.
105  !
106  use dc_date_generic, only: evalsec
108  implicit none
109  integer, intent(in):: factor
110  type(dc_difftime), intent(in):: diff
111  continue
112  result = factor > evalsec(diff)
113  end function dcdatetime_gt_if
logical function dcdatetime_gt_tt(time1, time2)
logical function dcdatetime_gt_if(factor, diff)
logical function dcdatetime_gt_fi(diff, factor)
real(dp), parameter, public cyclic_mdays
logical function dcdatetime_gt_ff(diff1, diff2)