gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dcdatetimesub.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, Eizi TOYODA
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!> This file contains implementation procedures of subtraction
13!> for dc_date_types#DC_DATETIME and dc_date_types#DC_DIFFTIME.
14!> @enden
15!>
16!> @ja
17!> @brief 利用者定義演算子 (-) のための関数
18!> @details
19!> このファイルには dc_date_types#DC_DATETIME および dc_date_types#DC_DIFFTIME
20!> の減算の実装手続きが含まれています。
21!> @endja
22!>
23
24!> @en
25!> @brief Subtract DC_DIFFTIME from DC_DATETIME
26!> @details
27!> Subtract a time difference from a datetime.
28!>
29!> @param[in] time Datetime to subtract from
30!> @param[in] diff Time difference to subtract
31!> @return Result of subtraction
32!> @enden
33!>
34!> @ja
35!> @brief DC_DATETIME から DC_DIFFTIME を減算
36!> @details
37!> 日時から日時差を減算します.
38!>
39!> @param[in] time 減算元の日時
40!> @param[in] diff 減算する日時差
41!> @return 減算結果
42!> @endja
43function dcdatetime_sub_tf(time, diff) result(result)
44
47 use dc_scaledsec, only: dc_scaled_sec, &
48 & operator(<), operator(>), operator(<=), operator(>=), &
49 & operator(+), operator(-), operator(*), operator(/), &
50 & modulo, int, abs, sign
51 implicit none
52 type(dc_datetime):: result
53 type(dc_datetime), intent(in):: time
54 type(dc_difftime), intent(in):: diff
55 type(dc_scaled_sec):: time_year, time_mon, time_day, time_sec
56 integer:: time_caltype
57 character(6):: time_zone
58continue
59 call eval(time, &
60 & sclyear = time_year, sclmon = time_mon, sclday = time_day, &
61 & sclsec = time_sec, caltype = time_caltype, zone = time_zone )
62 call dcdatetimecreate(result, &
63 & sclyear = time_year, &
64 & sclmon = time_mon - diff % mon, &
65 & sclday = time_day - diff % day, &
66 & sclsec = time_sec - diff % sec, &
67 & caltype = time_caltype, zone = time_zone)
68end function dcdatetime_sub_tf
69
70!> @en
71!> @brief Subtract two DC_DATETIME values
72!> @details
73!> Subtract one datetime from another and return the difference.
74!>
75!> @param[in] time1 First datetime (minuend)
76!> @param[in] time2 Second datetime (subtrahend)
77!> @return Time difference between time1 and time2
78!> @enden
79!>
80!> @ja
81!> @brief 2つの DC_DATETIME を減算
82!> @details
83!> 2つの日時の差を計算して返します.
84!>
85!> @param[in] time1 1番目の日時 (被減数)
86!> @param[in] time2 2番目の日時 (減数)
87!> @return time1 と time2 の日時差
88!> @endja
89function dcdatetime_sub_tt(time1, time2) result(result)
90
91 use dc_date_generic, only: evalsclsec, zonetodiff, operator(-)
94 use dc_scaledsec, only: dc_scaled_sec, &
95 & operator(<), operator(>), operator(<=), operator(>=), &
96 & operator(+), operator(-), operator(*), operator(/), &
97 & modulo, int, abs, sign
98 implicit none
99 type(dc_difftime):: result
100 type(dc_datetime), intent(in):: time1, time2
101continue
102 result % day = time1 % day - time2 % day
103 result % sec = time1 % sec - time2 % sec &
104 & + evalsclsec(zonetodiff(time1 % zone) - zonetodiff(time2 % zone))
105 result % day_seconds = time1 % day_seconds
106 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
107end function dcdatetime_sub_tt
108
109!> @en
110!> @brief Subtract two DC_DIFFTIME values
111!> @details
112!> Subtract one time difference from another.
113!>
114!> @param[in] diff1 First time difference (minuend)
115!> @param[in] diff2 Second time difference (subtrahend)
116!> @return Result of subtraction
117!> @enden
118!>
119!> @ja
120!> @brief 2つの DC_DIFFTIME を減算
121!> @details
122!> 2つの日時差を減算します.
123!>
124!> @param[in] diff1 1番目の日時差 (被減数)
125!> @param[in] diff2 2番目の日時差 (減数)
126!> @return 減算結果
127!> @endja
128function dcdatetime_sub_ff(diff1, diff2) result(result)
129
132 use dc_scaledsec, only: operator(-)
133 implicit none
134 type(dc_difftime):: result
135 type(dc_difftime), intent(in):: diff1, diff2
136continue
137 result % mon = diff1 % mon - diff2 % mon
138 result % day = diff1 % day - diff2 % day
139 result % sec = diff1 % sec - diff2 % sec
140 result % day_seconds = diff1 % day_seconds
141 call dcdate_nondimcheck('dc_date#operator(-)', diff1, diff2, result)
142 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
143end function dcdatetime_sub_ff
144
145!> @en
146!> @brief Subtract double precision from DC_DIFFTIME
147!> @details
148!> Subtract a double precision seconds value from a time difference.
149!>
150!> @param[in] diff Time difference (minuend)
151!> @param[in] sec Seconds to subtract (double precision)
152!> @return Result of subtraction
153!> @enden
154!>
155!> @ja
156!> @brief DC_DIFFTIME から倍精度実数を減算
157!> @details
158!> 日時差から倍精度実数の秒数を減算します.
159!>
160!> @param[in] diff 日時差 (被減数)
161!> @param[in] sec 減算する秒数 (倍精度実数)
162!> @return 減算結果
163!> @endja
164function dcdatetime_sub_fd(diff, sec) result(result)
165
168 use dc_scaledsec, only: operator(-)
169 use dc_types, only: dp
170 implicit none
171 type(dc_difftime):: result
172 type(dc_difftime), intent(in):: diff
173 real(dp), intent(in):: sec
174continue
175 result % mon = diff % mon
176 result % day = diff % day
177 result % sec = diff % sec - sec
178 result % day_seconds = diff % day_seconds
179 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
180end function dcdatetime_sub_fd
181
182!> @en
183!> @brief Subtract single precision from DC_DIFFTIME
184!> @details
185!> Subtract a single precision seconds value from a time difference.
186!>
187!> @param[in] diff Time difference (minuend)
188!> @param[in] sec Seconds to subtract (single precision)
189!> @return Result of subtraction
190!> @enden
191!>
192!> @ja
193!> @brief DC_DIFFTIME から単精度実数を減算
194!> @details
195!> 日時差から単精度実数の秒数を減算します.
196!>
197!> @param[in] diff 日時差 (被減数)
198!> @param[in] sec 減算する秒数 (単精度実数)
199!> @return 減算結果
200!> @endja
201function dcdatetime_sub_fr(diff, sec) result(result)
202
203 use dc_date_generic, only: operator(-)
205 use dc_scaledsec, only: operator(-)
206 use dc_types, only: dp
207 implicit none
208 type(dc_difftime):: result
209 type(dc_difftime), intent(in):: diff
210 real, intent(in):: sec
211continue
212 result = diff - real( sec, dp )
213end function dcdatetime_sub_fr
214
215!> @en
216!> @brief Subtract integer from DC_DIFFTIME
217!> @details
218!> Subtract an integer seconds value from a time difference.
219!>
220!> @param[in] diff Time difference (minuend)
221!> @param[in] sec Seconds to subtract (integer)
222!> @return Result of subtraction
223!> @enden
224!>
225!> @ja
226!> @brief DC_DIFFTIME から整数を減算
227!> @details
228!> 日時差から整数の秒数を減算します.
229!>
230!> @param[in] diff 日時差 (被減数)
231!> @param[in] sec 減算する秒数 (整数)
232!> @return 減算結果
233!> @endja
234function dcdatetime_sub_fi(diff, sec) result(result)
235
236 use dc_date_generic, only: operator(-)
238 use dc_scaledsec, only: operator(-)
239 use dc_types, only: dp
240 implicit none
241 type(dc_difftime):: result
242 type(dc_difftime), intent(in):: diff
243 integer, intent(in):: sec
244continue
245 result = diff - real( sec, dp )
246end function dcdatetime_sub_fi
type(dc_difftime) function dcdatetime_sub_fd(diff, sec)
type(dc_datetime) function dcdatetime_sub_tf(time, diff)
利用者定義演算子 (-) のための関数
type(dc_difftime) function dcdatetime_sub_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_sub_fi(diff, sec)
type(dc_difftime) function dcdatetime_sub_fr(diff, sec)
type(dc_difftime) function dcdatetime_sub_tt(time1, time2)
dc_date より提供される手続の引用仕様宣言
dc_date用の内部モジュール
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)
subroutine, public dcdate_nondimcheck(opr, diff1, diff2, rslt)
日付・時刻に関する構造データ型と定数
integer, save, public caltype
デフォルトの暦タイプ (グレゴリオ暦)
精密な時間演算のための秒スケールモジュール
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:92