dcdatetimelt.f90
Go to the documentation of this file.
1 != 利用者定義演算子 (<) のための関数
2 != Functions for user defined operation (<)
3 !
4 ! Authors:: Yasuhiro MORIKAWA
5 ! Version:: $Id: dcdatetimelt.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_lt_tt(time1, time2) result(result)
11  !
12  ! 2 つの引数の日時を比較します.
13  ! 2 つ目の引数に格納される日時が 1 つ目の引数に格納される日時
14  ! よりも進んでいる場合, .true. が返ります.
15  !
18  use dc_scaledsec, only: dc_scaled_sec, &
19  & operator(==), operator(<), operator(>), operator(<=), operator(>=), &
20  & operator(+)
21  implicit none
22  type(dc_datetime), intent(in):: time1, time2
23  type(dc_scaled_sec):: year1, year2, time1_sec, time2_sec
24  continue
25  call eval(time1, sclyear=year1)
26  call eval(time2, sclyear=year2)
27  if (year1 < year2) then
28  result = .true.
29  elseif (year1 > year2) then
30  result = .false.
31  else
32  time1_sec = evalsclsec(time1) + evalsclsec(zonetodiff(time1 % zone))
33  time2_sec = evalsclsec(time2) + evalsclsec(zonetodiff(time2 % zone))
34  if (time1_sec < time2_sec) then
35  result = .true.
36  else
37  result = .false.
38  end if
39  end if
40  end function dcdatetime_lt_tt
41 
42  logical function dcdatetime_lt_ff(diff1, diff2) result(result)
43  !
44  ! 2 つの引数の日時差を比較します.
45  ! 2 つ目の引数に格納される日時差が 1 つ目の引数に格納される日時差
46  ! よりも大きい場合, .true. が返ります.
47  !
48  use dc_date_generic, only: evalsec
50  use dc_scaledsec, only: &
51  & operator(<), operator(>), operator(<=), operator(>=), operator(==)
52  implicit none
53  type(dc_difftime), intent(in):: diff1, diff2
54  continue
55  if ( diff1 % day_seconds == diff2 % day_seconds ) then
56 
57  if ( diff1 % mon < diff2 % mon ) then
58  result = .true. ; return
59  elseif ( diff1 % mon > diff2 % mon ) then
60  result = .false. ; return
61  end if
62  if ( diff1 % day < diff2 % day ) then
63  result = .true. ; return
64  elseif ( diff1 % day > diff2 % day ) then
65  result = .false. ; return
66  end if
67  if ( diff1 % sec < diff2 % sec ) then
68  result = .true. ; return
69  elseif ( diff1 % sec > diff2 % sec ) then
70  result = .false. ; return
71  end if
72  result = .false.
73  else
74 
75  if (evalsec(diff1) < evalsec(diff2)) then
76  result = .true.
77  else
78  result = .false.
79  end if
80  end if
81 
82  end function dcdatetime_lt_ff
83 
84  logical function dcdatetime_lt_fi(diff, factor) result(result)
85  !
86  ! 2 つの引数の日時差を比較します.
87  ! 2 つ目の引数に格納される日時差が 1 つ目の引数に格納される日時差
88  ! よりも大きい場合, .true. が返ります.
89  !
90  use dc_date_generic, only: evalsec
92  implicit none
93  type(dc_difftime), intent(in):: diff
94  integer, intent(in):: factor
95  continue
96  result = evalsec(diff) < factor
97  end function dcdatetime_lt_fi
98 
99  logical function dcdatetime_lt_if(factor, diff) result(result)
100  !
101  ! 2 つの引数の日時差を比較します.
102  ! 2 つ目の引数に格納される日時差が 1 つ目の引数に格納される日時差
103  ! よりも大きい場合, .true. が返ります.
104  !
105  use dc_date_generic, only: evalsec
107  implicit none
108  integer, intent(in):: factor
109  type(dc_difftime), intent(in):: diff
110  continue
111  result = factor < evalsec(diff)
112  end function dcdatetime_lt_if
logical function dcdatetime_lt_tt(time1, time2)
logical function dcdatetime_lt_ff(diff1, diff2)
logical function dcdatetime_lt_fi(diff, factor)
logical function dcdatetime_lt_if(factor, diff)