gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dcdatetimeeq.f90
Go to the documentation of this file.
1! -*- mode: f90; coding: utf-8 -*-
2!-----------------------------------------------------------------------
3! Copyright (c) 2000-2026 Gtool Development Group. All rights reserved.
4!-----------------------------------------------------------------------
5!>
6!> @author Yasuhiro MORIKAWA
7!> @copyright Copyright (C) GFD Dennou Club, 2000-2026. All rights reserved. <br/>
8!> License is BSD-2-Clause. see [COPYRIGHT](@ref COPYRIGHT) in detail
9!> @en
10!> @brief Functions for user defined operation (==)
11!> @details
12!> Procedures described in this file are provided from "dc_date" module.
13!> @enden
14!>
15!> @ja
16!> @brief 利用者定義演算子 (==) のための関数
17!> @details
18!> このファイルに記載される手続き群は dc_date モジュールから提供されます.
19!> @endja
20!>
21
22!> @en
23!> @brief Compare two DC_DATETIME values for equality
24!> @details
25!> Compares two datetime arguments.
26!> Returns `.true.` if the datetime stored in the first argument
27!> is equal to the datetime stored in the second argument.
28!>
29!> @param[in] time1 First datetime
30!> @param[in] time2 Second datetime
31!> @return result `.true.` if equal, `.false.` otherwise
32!> @enden
33!>
34!> @ja
35!> @brief 2つの DC_DATETIME 値が等しいか比較
36!> @details
37!> 2 つの引数の日時を比較します.
38!> 1 つ目の引数に格納される日時が 2 つ目の引数に格納される日時
39!> と同じ場合, .true. が返ります.
40!>
41!> @param[in] time1 1つ目の日時
42!> @param[in] time2 2つ目の日時
43!> @return result 等しい場合 .true., そうでなければ .false.
44!> @endja
45logical function dcdatetime_eq_tt(time1, time2) result(result)
48 use dc_scaledsec, only: dc_scaled_sec, &
49 & operator(==), operator(<), operator(>), operator(<=), operator(>=), &
50 & operator(+), assignment(=)
51 implicit none
52 type(dc_datetime), intent(in):: time1, time2
53 type(dc_scaled_sec):: year1, year2, time1_sec, time2_sec
54continue
55 call eval(time1, sclyear=year1)
56 call eval(time2, sclyear=year2)
57 time1_sec = evalsclsec(time1) + evalsclsec(zonetodiff(time1 % zone))
58 time2_sec = evalsclsec(time2) + evalsclsec(zonetodiff(time2 % zone))
59 if (year1 == year2 .and. time1_sec == time2_sec) then
60 result = .true.
61 else
62 result = .false.
63 end if
64end function dcdatetime_eq_tt
65
66
67!> @en
68!> @brief Compare two DC_DIFFTIME values for equality
69!> @details
70!> Compares two time difference arguments.
71!> Returns `.true.` if the time difference stored in the first argument
72!> is equal to the time difference stored in the second argument.
73!>
74!> @param[in] diff1 First time difference
75!> @param[in] diff2 Second time difference
76!> @return result `.true.` if equal, `.false.` otherwise
77!> @enden
78!>
79!> @ja
80!> @brief 2つの DC_DIFFTIME 値が等しいか比較
81!> @details
82!> 2 つの引数の日時差を比較します.
83!> 1 つ目の引数に格納される日時差が 2 つ目の引数に格納される日時差
84!> と同じ場合, .true. が返ります.
85!>
86!> @param[in] diff1 1つ目の日時差
87!> @param[in] diff2 2つ目の日時差
88!> @return result 等しい場合 .true., そうでなければ .false.
89!> @endja
90logical function dcdatetime_eq_ff(diff1, diff2) result(result)
91 use dc_scaledsec, only: operator(==)
93 implicit none
94 type(dc_difftime), intent(in):: diff1, diff2
95continue
96 if ( diff1 % mon == diff2 % mon &
97 & .and. diff1 % day == diff2 % day &
98 & .and. diff1 % sec == diff2 % sec ) then
99 result = .true.
100 else
101 result = .false.
102 end if
103end function dcdatetime_eq_ff
104
105!> @en
106!> @brief Compare integer with DC_DIFFTIME for equality
107!> @details
108!> Compares whether time difference `diff` equals `i`.
109!> Returns `.true.` if `diff` converted to seconds equals `i`.
110!>
111!> @param[in] i Integer to compare
112!> @param[in] diff Time difference
113!> @return result `.true.` if equal, `.false.` otherwise
114!> @enden
115!>
116!> @ja
117!> @brief 整数と DC_DIFFTIME が等しいか比較
118!> @details
119!> 引数 `diff` の日時差が `i` と等しいかどうかを比較します. `diff`
120!> を秒数に換算した値と `i` とが等しい場合, .true. が返ります.
121!>
122!> @param[in] i 比較する整数
123!> @param[in] diff 日時差
124!> @return result 等しい場合 .true., そうでなければ .false.
125!> @endja
126logical function dcdatetime_eq_if(i, diff) result(result)
127 use dc_date_generic, only: operator(==)
129 implicit none
130 type(dc_difftime), intent(in):: diff
131 integer, intent(in):: i
132continue
133 result = real(i) == diff
134end function dcdatetime_eq_if
135
136!> @en
137!> @brief Compare DC_DIFFTIME with integer for equality
138!> @param[in] diff Time difference
139!> @param[in] i Integer to compare
140!> @return result `.true.` if equal, `.false.` otherwise
141!> @enden
142!>
143!> @ja
144!> @brief DC_DIFFTIME と整数が等しいか比較
145!> @param[in] diff 日時差
146!> @param[in] i 比較する整数
147!> @return result 等しい場合 .true., そうでなければ .false.
148!> @endja
149logical function dcdatetime_eq_fi(diff, i) result(result)
150 use dc_date_generic, only: operator(==)
152 implicit none
153 type(dc_difftime), intent(in):: diff
154 integer, intent(in):: i
155continue
156 result = i == diff
157end function dcdatetime_eq_fi
158
159!> @en
160!> @brief Compare single precision real with DC_DIFFTIME for equality
161!> @details
162!> Compares whether time difference `diff` equals `r`.
163!> Returns `.true.` if `diff` converted to seconds equals `r`.
164!>
165!> @param[in] r Real to compare
166!> @param[in] diff Time difference
167!> @return result `.true.` if equal, `.false.` otherwise
168!> @enden
169!>
170!> @ja
171!> @brief 単精度実数と DC_DIFFTIME が等しいか比較
172!> @details
173!> 引数 `diff` の日時差が `r` と等しいかどうかを比較します. `diff`
174!> を秒数に換算した値と `r` とが等しい場合, .true. が返ります.
175!>
176!> @param[in] r 比較する実数
177!> @param[in] diff 日時差
178!> @return result 等しい場合 .true., そうでなければ .false.
179!> @endja
180logical function dcdatetime_eq_rf(r, diff) result(result)
181 use dc_scaledsec, only: operator(==)
182 use dc_date_generic, only: evalsclsec
184 implicit none
185 type(dc_difftime), intent(in):: diff
186 real, intent(in):: r
187continue
188 if (evalsclsec(diff) == r) then
189 result = .true.
190 else
191 result = .false.
192 end if
193end function dcdatetime_eq_rf
194
195!> @en
196!> @brief Compare DC_DIFFTIME with single precision real for equality
197!> @param[in] diff Time difference
198!> @param[in] r Real to compare
199!> @return result `.true.` if equal, `.false.` otherwise
200!> @enden
201!>
202!> @ja
203!> @brief DC_DIFFTIME と単精度実数が等しいか比較
204!> @param[in] diff 日時差
205!> @param[in] r 比較する実数
206!> @return result 等しい場合 .true., そうでなければ .false.
207!> @endja
208logical function dcdatetime_eq_fr(diff, r) result(result)
209 use dc_date_generic, only: operator(==)
211 implicit none
212 type(dc_difftime), intent(in):: diff
213 real, intent(in):: r
214continue
215 result = r == diff
216end function dcdatetime_eq_fr
217
218!> @en
219!> @brief Compare double precision real with DC_DIFFTIME for equality
220!> @details
221!> Compares whether time difference `diff` equals `d`.
222!> Returns `.true.` if `diff` converted to seconds equals `d`.
223!>
224!> @param[in] d Double precision real to compare
225!> @param[in] diff Time difference
226!> @return result `.true.` if equal, `.false.` otherwise
227!> @enden
228!>
229!> @ja
230!> @brief 倍精度実数と DC_DIFFTIME が等しいか比較
231!> @details
232!> 引数 `diff` の日時差が `d` と等しいかどうかを比較します. `diff`
233!> を秒数に換算した値と `d` とが等しい場合, .true. が返ります.
234!>
235!> @param[in] d 比較する倍精度実数
236!> @param[in] diff 日時差
237!> @return result 等しい場合 .true., そうでなければ .false.
238!> @endja
239logical function dcdatetime_eq_df(d, diff) result(result)
240 use dc_date_generic, only: evalsclsec
242 use dc_scaledsec, only: operator(==)
243 use dc_types, only: dp
244 implicit none
245 type(dc_difftime), intent(in):: diff
246 real(dp), intent(in):: d
247continue
248 if (evalsclsec(diff) == d) then
249 result = .true.
250 else
251 result = .false.
252 end if
253end function dcdatetime_eq_df
254
255!> @en
256!> @brief Compare DC_DIFFTIME with double precision real for equality
257!> @param[in] diff Time difference
258!> @param[in] d Double precision real to compare
259!> @return result `.true.` if equal, `.false.` otherwise
260!> @enden
261!>
262!> @ja
263!> @brief DC_DIFFTIME と倍精度実数が等しいか比較
264!> @param[in] diff 日時差
265!> @param[in] d 比較する倍精度実数
266!> @return result 等しい場合 .true., そうでなければ .false.
267!> @endja
268logical function dcdatetime_eq_fd(diff, d) result(result)
269 use dc_date_generic, only: operator(==)
270 use dc_types, only: dp
272 implicit none
273 type(dc_difftime), intent(in):: diff
274 real(dp), intent(in):: d
275continue
276 result = d == diff
277end function dcdatetime_eq_fd
logical function dcdatetime_eq_df(d, diff)
logical function dcdatetime_eq_fd(diff, d)
logical function dcdatetime_eq_ff(diff1, diff2)
logical function dcdatetime_eq_tt(time1, time2)
利用者定義演算子 (==) のための関数
logical function dcdatetime_eq_if(i, diff)
logical function dcdatetime_eq_fr(diff, r)
logical function dcdatetime_eq_rf(r, diff)
logical function dcdatetime_eq_fi(diff, i)
dc_date より提供される手続の引用仕様宣言
日付・時刻に関する構造データ型と定数
精密な時間演算のための秒スケールモジュール
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:92