Loading...
Searching...
No Matches
dc_date_generic.f90
Go to the documentation of this file.
1!= dc_date より提供される手続の引用仕様宣言
2!= Interface of procedures provided from dc_date
3!
4! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5! Version:: $Id: dc_date_generic.f90,v 1.3 2009-06-01 15:17:23 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
11 != dc_date より提供される手続の引用仕様宣言
12 != Interface of procedures provided from dc_date
13 !
14 ! モジュールの概要については, dc_date
15 ! を参照ください.
16 !
17 ! See "dc_date" for brief of this module.
18 !
19 !== Procedures List
20 !
21 ! 以下の手続きは構造型 dc_date_types#DC_DATETIME または
22 ! dc_date_types#DC_DIFFTIME 変数 (日時, 時刻に関する情報を格納)
23 ! を対象とします.
24 !
25 ! DCDateTimeCreate :: dc_date_types#DC_DATETIME 型変数の初期設定
26 ! DCDiffTimeCreate :: dc_date_types#DC_DIFFTIME 型変数の初期設定
27 !
28 ! #assignment(=) :: dc_date_types#DC_DATETIME 型変数および
29 ! dc_date_types#DC_DIFFTIME 型変数の初期設定
30 !
31 ! Eval :: 日時, 時刻情報を個別に取得
32 !
33 ! toChar :: 日時, 時刻情報を文字型変数へ変換
34 !
35 ! EvalDay :: 日数 (実数型) に換算して取得
36 ! EvalHour :: 時間 (実数型) に換算して取得
37 ! EvalMin :: 分 (実数型) に換算して取得
38 ! EvalSec :: 秒 (実数型) に換算して取得
39 ! EvalNondim :: 無次元時間 (実数型) に換算して取得
40 ! EvalByUnit :: 単位を指定し, 日, 時, 分, 秒のいづれか (実数型)
41 ! に換算して取得
42 !
43 ! #operator(+) :: 加算 (dc_date_types#DC_DATETIME 型 および
44 ! dc_date_types#DC_DIFFTIME 型 同士)
45 ! #operator(-) :: 減算 (dc_date_types#DC_DATETIME 型 および
46 ! dc_date_types#DC_DIFFTIME 型 同士)
47 ! #operator(*) :: 乗算 (dc_date_types#DC_DIFFTIME 型と数値型)
48 ! #operator(/) :: 除算 (dc_date_types#DC_DIFFTIME 型と数値型)
49 ! mod :: 余り (dc_date_types#DC_DIFFTIME 型同士)
50 ! #operator(==) :: 比較 (dc_date_types#DC_DATETIME 型同士)
51 ! #operator(>) :: 比較 (dc_date_types#DC_DATETIME 型同士)
52 ! #operator(>=) :: 比較 (dc_date_types#DC_DATETIME 型同士)
53 ! #operator(<) :: 比較 (dc_date_types#DC_DATETIME 型同士)
54 ! #operator(<=) :: 比較 (dc_date_types#DC_DATETIME 型同士)
55 ! max :: 大きい値を返す
56 ! min :: 小さい値を返す
57 !
58 ! SetZone :: タイムゾーンを変更
59 !
60 ! DCDateTimePutLine :: dc_date_types#DC_DATETIME 型変数に格納されている
61 ! 日時, 時刻情報の印字
62 ! DCDiffTimePutLine :: dc_date_types#DC_DIFFTIME 型変数に格納されている
63 ! 日時, 時刻情報の印字
64 !
65 !
66 ! 以下の手続きは dc_date_types 内部の変数を変更します.
67 !
68 ! SetCaltype :: 暦法のデフォルトを変更
69 ! SetSecOfDay :: 1 日の秒数のデフォルトを変更
70 !
71 ! その他の手続き
72 !
73 ! ValidCaltype :: 暦法が有効なものかをチェック
74 ! ValidZone :: タイムゾーンとして有効化をチェック
75 ! ZoneToDiff :: タイムゾーンを dc_date_types#DC_DIFFTIME 変数へと変換
76 ! ParseTimeUnits :: 時間の単位を解析し, 単位のシンボルを返します.
77 !
78 !== Usage
79 !
80 !=== 現在時刻の表示
81 !
82 ! dc_date_types#DC_DATETIME 型の変数にサブルーチン DCDateTimeCreate
83 ! を用いると, 時刻が設定されます.
84 ! 下記のように特に年月日を指定しないと現在時刻が設定されます.
85 ! 設定された時刻は toChar によって文字型変数へと変換できます.
86 ! サブルーチン Printf に関しては dc_string#Printf を参照ください.
87 !
88 ! program dc_date_sapmle1
89 ! use dc_string, only: Printf
90 ! use dc_date, only: DC_DATETIME, DCDateTimeCreate, toChar
91 ! implicit none
92 ! type(DC_DATETIME) :: time
93 !
94 ! call DCDateTimeCreate( time = time ) ! (out)
95 ! call Printf( fmt = 'current date and time is %c', c1 = trim( toChar(time) ) )
96 ! end program dc_date_sapmle1
97 !
98 !=== 日時, 時刻情報の加算
99 !
100 ! dc_date_types#DC_DIFFTIME 型の変数は日時差を表現します. 下記の例では,
101 ! 日時差を表現するための変数として *diff*
102 ! を用意し, サブルーチン Create によって 25 日 + 12 時間 + 50 分の日時差
103 ! を設定しています. dc_date_types#DC_DATETIME 型の変数 *time_before* と *diff* とを
104 ! #operator(+) によって加算することで *time_before* から
105 ! 25 日 + 12 時間 + 50 分を進めた日時 *time_after* を取得しています.
106 !
107 ! program dc_date_sapmle2
108 ! use dc_types, only: DP
109 ! use dc_string, only: Printf
110 ! use dc_date, only: DC_DATETIME, DC_DIFFTIME, &
111 ! & DCDateTimeCreate, DCDiffTimeCreate, toChar, operator(+)
112 ! implicit none
113 ! type(DC_DATETIME) :: time_before, time_after
114 ! type(DC_DIFFTIME) :: diff
115 !
116 ! call DCDateTimeCreate( time = time_before, & ! (out)
117 ! & year = 2006, mon = 6, day = 10, & ! (in)
118 ! & hour = 14, min = 15, sec = 0.0_DP ) ! (in)
119 ! call DCDiffTimeCreate( diff = diff, & ! (out)
120 ! & day = 25, hour = 12, min = 50) ! (in)
121 !
122 ! time_after = time_before + diff
123 !
124 ! call Printf( fmt = '%c + %c = %c', &
125 ! & c1 = trim( toChar(time_before) ), c2 = trim( toChar(diff) ), &
126 ! & c3 = trim( toChar(time_after) ) )
127 ! end program dc_date_sapmle2
128 !
129 !
130 !=== 時間積分のループへの応用
131 !
132 ! 以下は dA/dt = - αA (初期値 1, α=0.0001) を t = 12 (時間)
133 ! まで解くプログラムの例です. 時間積分には前進差分を用いています.
134 ! Δt, データの出力間隔, 計算時間に dc_date_types#DC_DIFFTIME を用いることで,
135 ! ループの終了処理や
136 ! データ出力の際の時刻の比較が容易となります.
137 !
138 ! program dc_date_sapmle3
139 ! use dc_types, only: DP
140 ! use dc_date, only: DC_DIFFTIME, &
141 ! & DCDiffTimeCreate, EvalSec, EvalByUnit, mod, &
142 ! & operator(*), operator(==), operator(>)
143 ! implicit none
144 ! real(DP) :: func_a = 1.0d0 ! 関数 A の初期値
145 ! real(DP), parameter :: alph = 0.0001d0 ! 係数 α
146 ! character(*), parameter :: out_unit = 'hour' ! 出力される時刻の単位
147 ! type(DC_DIFFTIME):: DelTimef, intervalf, calctimef
148 ! integer :: i
149 ! continue
150 ! call DCDiffTimeCreate( & ! Δt = 5.0 (秒)
151 ! & diff = DelTimef, & ! (out)
152 ! & value = 5.0_DP, unit = 'sec') ! (in)
153 ! call DCDiffTimeCreate( & ! データ出力間隔 = 1.0 (分)
154 ! & diff = intervalf, & ! (out)
155 ! & value = 1.0_DP, unit = 'min') ! (in)
156 ! call DCDiffTimeCreate( & ! 計算時間 = 12.0 (時間)
157 ! & diff = calctimef, & ! (out)
158 ! & value = 12.0_DP, unit = 'hour') ! (in)
159 !
160 ! open( 10, file='dc_date_sample.dat' )
161 ! write(10,'(A,A,A)') '# ', out_unit, ' value'
162 !
163 ! i = 1
164 ! do
165 ! if (DelTimef * i > calctimef) exit ! 計算時間を過ぎたら終了
166 !
167 ! !---------------------------------------------
168 ! ! A_(n+1) = (1 - αΔt) * A_(n)
169 ! !---------------------------------------------
170 ! func_a = (1.0 - alph * EvalSec(DelTimef)) * func_a
171 !
172 ! !---------------------------------------------
173 ! ! intervalf (1 分) 毎にデータを出力
174 ! !---------------------------------------------
175 ! if (mod(DelTimef * i, intervalf) == 0) then
176 ! write(10,*) ' ', EvalByUnit( DelTimef * i, out_unit ), func_a
177 ! end if
178 ! i = i + 1
179 ! end do
180 ! end program dc_date_sapmle3
181 !
182 !
183
185 use dc_types, only: dp, string, token
186 use dc_present, only: present_and_not_empty
187
188 implicit none
189
190 private
193 public:: eval
196
197 public:: assignment(=)
198 public:: mod, operator(/), operator(-), operator(+), operator(*)
199 public:: operator(<), operator(>), operator(>=), operator(<=)
200 public:: operator(==), max, min
201 public:: tochar, tocharcal
203 public:: evalsclsec
204
205 public:: create, putline
206 ! 後方互換用
207 ! For backward compatibility
208
210 subroutine dcdatetimecreate1(time, &
211 & year, mon, day, hour, min, sec, &
212 & zone, zone_hour, zone_min, caltype, caltype_str, day_seconds, &
213 & sclyear, sclmon, sclday, sclsec, err) !:doc-priority 40:
214 use dc_types, only: dp
215 use dc_date_types, only: dc_datetime
216 use dc_scaledsec, only: dc_scaled_sec
217 type(dc_datetime), intent(out):: time
218 integer, intent(in), optional:: year, mon, day, hour, min
219 real(DP),intent(in), optional:: sec, day_seconds
220 character(*), intent(in), optional :: zone
221 integer, intent(in), optional :: zone_hour
222 integer, intent(in), optional :: zone_min
223 integer, intent(in), optional:: caltype
224 character(*), intent(in), optional:: caltype_str
225 type(dc_scaled_sec), intent(in), optional:: sclyear, sclmon, sclday, sclsec
226 logical, intent(out), optional:: err
227 end subroutine dcdatetimecreate1
228 end interface
229
231 subroutine dcdifftimecreate1(diff, &
232 & year, mon, day, hour, min, sec, day_seconds, nondim, &
233 & sclyear, sclmon, sclday, sclsec ) !:doc-priority 60:
234 use dc_types, only: dp
235 use dc_date_types, only: dc_difftime
236 use dc_scaledsec, only: dc_scaled_sec
237 type(dc_difftime), intent(out) :: diff
238 integer, intent(in), optional:: year, mon, day, hour, min
239 real(DP),intent(in), optional:: sec, day_seconds, nondim
240 type(dc_scaled_sec), intent(in), optional:: sclyear, sclmon, sclday, sclsec
241 end subroutine dcdifftimecreate1
242
243 subroutine dcdifftimecreate2d(diff, value, unit, unit_symbol, err) !:doc-priority 70:
244 use dc_types, only: dp
245 use dc_date_types, only: dc_difftime
246 type(dc_difftime), intent(out) :: diff
247 real(DP), intent(in) :: value
248 character(*), intent(in) :: unit
249 integer, intent(in), optional :: unit_symbol
250 logical, intent(out), optional :: err
251 end subroutine dcdifftimecreate2d
252
253 subroutine dcdifftimecreate2r(diff, value, unit, unit_symbol, err) !:doc-priority 80:
254 use dc_date_types, only: dc_difftime
255 type(dc_difftime), intent(out) :: diff
256 real, intent(in) :: value
257 character(*), intent(in) :: unit
258 integer, intent(in), optional :: unit_symbol
259 logical, intent(out), optional :: err
260 end subroutine dcdifftimecreate2r
261
262 subroutine dcdifftimecreate2i(diff, value, unit, unit_symbol, err) !:doc-priority 90:
263 use dc_date_types, only: dc_difftime
264 type(dc_difftime), intent(out) :: diff
265 integer, intent(in) :: value
266 character(*), intent(in) :: unit
267 integer, intent(in), optional :: unit_symbol
268 logical, intent(out), optional :: err
269 end subroutine dcdifftimecreate2i
270
271 end interface
272
274 subroutine dcdatetimeputline(time, unit, indent)
275 use dc_date_types, only: dc_datetime
276 type(dc_datetime), intent(in) :: time
277 integer, intent(in), optional :: unit
278 character(*), intent(in), optional:: indent
279 end subroutine dcdatetimeputline
280 end interface
281
283 subroutine dcdifftimeputline(diff, unit, indent)
284 use dc_date_types, only: dc_difftime
285 type(dc_difftime), intent(in) :: diff
286 integer, intent(in), optional :: unit
287 character(*), intent(in), optional:: indent
288 end subroutine dcdifftimeputline
289 end interface
290
291 interface assignment(=)
292
293 subroutine dcdatetimecreatei(time, sec) !:doc-priority 20:
294 use dc_date_types, only: dc_datetime
295 type(dc_datetime), intent(out):: time
296 integer, intent(in):: sec
297 end subroutine dcdatetimecreatei
298
299 subroutine dcdatetimecreater(time, sec) !:doc-priority 30:
300 use dc_date_types, only: dc_datetime
301 type(dc_datetime), intent(out):: time
302 real, intent(in):: sec
303 end subroutine dcdatetimecreater
304
305 subroutine dcdatetimecreated(time, sec) !:doc-priority 40:
306 use dc_types, only: dp
307 use dc_date_types, only: dc_datetime
308 type(dc_datetime), intent(out):: time
309 real(DP), intent(in):: sec
310 end subroutine dcdatetimecreated
311
312 subroutine dcdifftimecreatei(diff, sec) !:doc-priority 60:
313 use dc_date_types, only: dc_difftime
314 type(dc_difftime), intent(out):: diff
315 integer, intent(in):: sec
316 end subroutine dcdifftimecreatei
317
318 subroutine dcdifftimecreater(diff, sec) !:doc-priority 70:
319 use dc_date_types, only: dc_difftime
320 type(dc_difftime), intent(out):: diff
321 real, intent(in):: sec
322 end subroutine dcdifftimecreater
323
324 subroutine dcdifftimecreated(diff, sec) !:doc-priority 80:
325 use dc_types, only: dp
326 use dc_date_types, only: dc_difftime
327 type(dc_difftime), intent(out):: diff
328 real(DP), intent(in):: sec
329 end subroutine dcdifftimecreated
330
331!!$ subroutine DCDateLetFC(diff, string)
332!!$ use dc_date_types, only: DC_DIFFTIME
333!!$ type(DC_DIFFTIME), intent(out):: diff
334!!$ character(len = *), intent(in):: string
335!!$ end subroutine DCDateLetFC
336!!$
337!!$ subroutine DCDateLetTC(time, string)
338!!$ use dc_date_types, only: DC_DATETIME
339!!$ type(DC_DATETIME), intent(out):: time
340!!$ character(len = *), intent(in):: string
341!!$ end subroutine DCDateLetTC
342
343 end interface
344
345 interface setcaltype
346 subroutine dcdatetimesetcaltype(caltype)
347 integer, intent(in):: caltype
348 end subroutine dcdatetimesetcaltype
349 end interface
350
351 interface setsecofday
352 subroutine dcdatetimesetsecofday(sec)
353 use dc_types, only: dp
354 real(DP), intent(in):: sec
355 end subroutine dcdatetimesetsecofday
356 end interface
357
358 interface validcaltype
359 function dcdatetimevalidcaltype(caltype) result(result)
360 integer, intent(in):: caltype
361 logical:: result
362 end function dcdatetimevalidcaltype
363 end interface
364
365 interface validzone
366 function dcdatetimevalidzone(zone) result(result)
367 character(*), intent(in):: zone
368 logical:: result
369 end function dcdatetimevalidzone
370 end interface
371
372 interface zonetodiff
373 function dcdatetimezonetodiff(zone) result(diff)
374 use dc_date_types, only: dc_difftime
375 type(dc_difftime):: diff
376 character(*), intent(in):: zone
377 end function dcdatetimezonetodiff
378 end interface
379
381 function dcdatetimeparseunits(str) result(symbol)
382 character(*), intent(in):: str
383 integer:: symbol
384 end function dcdatetimeparseunits
385 end interface
386
387 interface setzone
388 subroutine dcdatetimesetzone(time, zone, err)
389 use dc_date_types, only: dc_datetime
390 type(dc_datetime), intent(inout):: time
391 character(*), intent(in):: zone
392 logical, intent(out), optional:: err
393 end subroutine dcdatetimesetzone
394 end interface
395
396
397 interface eval
398
399 subroutine dcdatetimeeval1(time, year, mon, day, hour, min, &
400 & sec, caltype, zone, sclyear, sclmon, sclday, sclsec) !:doc-priority 40:
401 use dc_types, only: dp
402 use dc_date_types, only: dc_datetime
403 use dc_scaledsec, only: dc_scaled_sec
404 type(dc_datetime), intent(in):: time
405 integer, intent(out), optional:: year, mon, day, hour, min, caltype
406 real(DP), intent(out), optional:: sec
407 character(*), intent(out), optional:: zone
408 type(dc_scaled_sec), intent(out), optional:: sclyear, sclmon, sclday, sclsec
409 end subroutine dcdatetimeeval1
410
411!!$ subroutine DCDateTimeEval0(time, mon, day, sec)
412!!$ use dc_date_types, only: DC_DATETIME
413!!$ use dc_types, only: DP
414!!$ type(DC_DATETIME), intent(in):: time
415!!$ integer, intent(out):: mon, day
416!!$ real(DP), intent(out):: sec
417!!$ end subroutine DCDateTimeEval0
418
419 subroutine dcdifftimeeval1(diff, &
420 & year, mon, day, hour, min, sec, nondim, &
421 & sclyear, sclmon, sclday, sclsec, sclnondim, err) !:doc-priority 60:
422 use dc_types, only: dp
423 use dc_date_types, only: dc_difftime
424 use dc_scaledsec, only: dc_scaled_sec
425 type(dc_difftime), intent(in):: diff
426 integer, intent(out), optional:: year, mon, day, hour, min
427 real(DP), intent(out), optional:: sec, nondim
428 type(dc_scaled_sec), intent(out), optional:: sclyear, sclmon, sclday, sclsec, sclnondim
429 logical, intent(out), optional :: err
430 end subroutine dcdifftimeeval1
431
432 end interface
433
434 interface evalday
435 function dcdatetimeevalday(time) result(result) !:doc-priority 40:
436 use dc_types, only: dp
437 use dc_date_types, only: dc_datetime
438 real(dp):: result
439 type(dc_datetime), intent(in):: time
440 end function dcdatetimeevalday
441
442 function dcdifftimeevalday(diff) result(result) !:doc-priority 60:
443 use dc_types, only: dp
444 use dc_date_types, only: dc_difftime
445 real(dp):: result
446 type(dc_difftime), intent(in):: diff
447 end function dcdifftimeevalday
448 end interface
449
450 interface evalhour
451 function dcdatetimeevalhour(time) result(result) !:doc-priority 40:
452 use dc_types, only: dp
453 use dc_date_types, only: dc_datetime
454 real(dp):: result
455 type(dc_datetime), intent(in):: time
456 end function dcdatetimeevalhour
457
458 function dcdifftimeevalhour(diff) result(result) !:doc-priority 60:
459 use dc_types, only: dp
460 use dc_date_types, only: dc_difftime
461 real(dp):: result
462 type(dc_difftime), intent(in):: diff
463 end function dcdifftimeevalhour
464 end interface
465
466 interface evalmin
467 function dcdatetimeevalmin(time) result(result) !:doc-priority 40:
468 use dc_types, only: dp
469 use dc_date_types, only: dc_datetime
470 real(dp):: result
471 type(dc_datetime), intent(in):: time
472 end function dcdatetimeevalmin
473
474 function dcdifftimeevalmin(diff) result(result) !:doc-priority 60:
475 use dc_types, only: dp
476 use dc_date_types, only: dc_difftime
477 real(dp):: result
478 type(dc_difftime), intent(in):: diff
479 end function dcdifftimeevalmin
480 end interface
481
482 interface evalsec
483 function dcdatetimeevalsec(time) result(result) !:doc-priority 40:
484 use dc_types, only: dp
485 use dc_date_types, only: dc_datetime
486 real(dp):: result
487 type(dc_datetime), intent(in):: time
488 end function dcdatetimeevalsec
489
490 function dcdifftimeevalsec(diff) result(result) !:doc-priority 60:
491 use dc_types, only: dp
492 use dc_date_types, only: dc_difftime
493 real(dp):: result
494 type(dc_difftime), intent(in):: diff
495 end function dcdifftimeevalsec
496 end interface
497
498 interface evalnondim
499 function dcdifftimeevalnondim(diff) result(result)
500 use dc_types, only: dp
501 use dc_date_types, only: dc_difftime
502 real(dp):: result
503 type(dc_difftime), intent(in):: diff
504 end function dcdifftimeevalnondim
505 end interface
506
507 interface evalsclsec
508 function dcdatetimeevalsclsec(time) result(result) !:doc-priority 40:
509 use dc_date_types, only: dc_datetime
510 use dc_scaledsec, only: dc_scaled_sec
511 type(dc_scaled_sec):: result
512 type(dc_datetime), intent(in):: time
513 end function dcdatetimeevalsclsec
514
515 function dcdifftimeevalsclsec(diff) result(result) !:doc-priority 60:
516 use dc_date_types, only: dc_difftime
517 use dc_scaledsec, only: dc_scaled_sec
518 type(dc_scaled_sec):: result
519 type(dc_difftime), intent(in):: diff
520 end function dcdifftimeevalsclsec
521 end interface
522
523 interface evalbyunit
524
525 function dcdatetimeevalbyunit(time, unit, unit_symbol) result(result)
526 use dc_types, only: dp, token
527 use dc_date_types, only: dc_datetime
528 real(dp):: result
529 type(dc_datetime), intent(in):: time
530 character(*), intent(in), optional:: unit
531 integer, intent(in), optional:: unit_symbol
532 end function dcdatetimeevalbyunit
533
534 function dcdifftimeevalbyunit(diff, unit, unit_symbol) result(result)
535 use dc_types, only: dp, token
536 use dc_date_types, only: dc_difftime
537 real(dp):: result
538 type(dc_difftime), intent(in):: diff
539 character(*), intent(in), optional:: unit
540 integer, intent(in), optional:: unit_symbol
541 end function dcdifftimeevalbyunit
542 end interface
543
544
545
546 interface tochar
547 function dcdatetimetochar(time) result(result) !:doc-priority 40:
548 use dc_types, only: string
549 use dc_date_types, only: dc_datetime
550 character(STRING) :: result
551 type(dc_datetime), intent(in):: time
552 end function dcdatetimetochar
553
554 function dcdifftimetochar(diff) result(result) !:doc-priority 60:
555 use dc_types, only: string
556 use dc_date_types, only: dc_difftime
557 character(STRING) :: result
558 type(dc_difftime), intent(in):: diff
559 end function dcdifftimetochar
560 end interface
561
562 interface tocharcal
563 function dcdatetimetocharcal(time, upcase) result(result)
564 use dc_types, only: token
565 use dc_date_types, only: dc_datetime
566 character(TOKEN) :: result
567 type(dc_datetime), intent(in):: time
568 logical, intent(in), optional:: upcase
569 end function dcdatetimetocharcal
570 end interface
571
572 interface operator(+)
573 type(dc_datetime) function dcdatetime_add_ft(diff, time) result(result)
575 type(dc_difftime), intent(in):: diff
576 type(dc_datetime), intent(in):: time
577 end function dcdatetime_add_ft
578
579 type(dc_datetime) function dcdatetime_add_tf(time, diff) result(result)
581 type(dc_datetime), intent(in):: time
582 type(dc_difftime), intent(in):: diff
583 end function dcdatetime_add_tf
584
585 type(dc_difftime) function dcdatetime_add_ff(diff1, diff2) result(result)
587 type(dc_difftime), intent(in):: diff1, diff2
588 end function dcdatetime_add_ff
589
590 type(dc_difftime) function dcdatetime_add_fd(diff, sec) result(result)
592 use dc_types, only: dp
593 type(dc_difftime), intent(in):: diff
594 real(dp), intent(in):: sec
595 end function dcdatetime_add_fd
596
597 type(dc_difftime) function dcdatetime_add_fr(diff, sec) result(result)
599 type(dc_difftime), intent(in):: diff
600 real, intent(in):: sec
601 end function dcdatetime_add_fr
602
603 type(dc_difftime) function dcdatetime_add_fi(diff, sec) result(result)
605 type(dc_difftime), intent(in):: diff
606 integer, intent(in):: sec
607 end function dcdatetime_add_fi
608 end interface
609
610 interface operator(-)
611 type(dc_datetime) function dcdatetime_sub_tf(time, diff) result(result) !:doc-priority 40:
613 type(dc_datetime), intent(in):: time
614 type(dc_difftime), intent(in):: diff
615 end function dcdatetime_sub_tf
616
617 type(dc_difftime) function dcdatetime_sub_tt(time1, time2) result(result)
619 type(dc_datetime), intent(in):: time1, time2
620 end function dcdatetime_sub_tt
621
622 type(dc_difftime) function dcdatetime_sub_ff(diff1, diff2) result(result)
624 type(dc_difftime), intent(in):: diff1, diff2
625 end function dcdatetime_sub_ff
626
627 type(dc_difftime) function dcdatetime_sub_fd(diff, sec) result(result)
629 use dc_types, only: dp
630 type(dc_difftime), intent(in):: diff
631 real(dp), intent(in):: sec
632 end function dcdatetime_sub_fd
633
634 type(dc_difftime) function dcdatetime_sub_fr(diff, sec) result(result)
636 type(dc_difftime), intent(in):: diff
637 real, intent(in):: sec
638 end function dcdatetime_sub_fr
639
640 type(dc_difftime) function dcdatetime_sub_fi(diff, sec) result(result)
642 type(dc_difftime), intent(in):: diff
643 integer, intent(in):: sec
644 end function dcdatetime_sub_fi
645 end interface
646
647 interface operator(*)
648 type(dc_difftime) function dcdatetime_mul_if(factor, diff) result(result) !:doc-priority 51:
650 integer, intent(in):: factor
651 type(dc_difftime), intent(in):: diff
652 end function dcdatetime_mul_if
653
654 type(dc_difftime) function dcdatetime_mul_fi(diff, factor) result(result) !:doc-priority 52:
656 type(dc_difftime), intent(in):: diff
657 integer, intent(in):: factor
658 end function dcdatetime_mul_fi
659
660 type(dc_difftime) function dcdatetime_mul_rf(factor, diff) result(result) !:doc-priority 61:
662 real, intent(in):: factor
663 type(dc_difftime), intent(in):: diff
664 end function dcdatetime_mul_rf
665
666 type(dc_difftime) function dcdatetime_mul_fr(diff, factor) result(result) !:doc-priority 62:
668 type(dc_difftime), intent(in):: diff
669 real, intent(in):: factor
670 end function dcdatetime_mul_fr
671
672 type(dc_difftime) function dcdatetime_mul_df(factor, diff) result(result) !:doc-priority 71:
673 use dc_types, only: dp
675 real(dp), intent(in):: factor
676 type(dc_difftime), intent(in):: diff
677 end function dcdatetime_mul_df
678
679 type(dc_difftime) function dcdatetime_mul_fd(diff, factor) result(result) !:doc-priority 72:
680 use dc_types, only: dp
682 type(dc_difftime), intent(in):: diff
683 real(dp), intent(in):: factor
684 end function dcdatetime_mul_fd
685
686 end interface
687
688 interface operator(/)
689 type(dc_difftime) function dcdatetime_div_fi(diff, denominator) result(result)
691 type(dc_difftime), intent(in):: diff
692 integer, intent(in):: denominator
693 end function dcdatetime_div_fi
694
695 type(dc_difftime) function dcdatetime_div_fr(diff, denominator) result(result)
697 type(dc_difftime), intent(in):: diff
698 real, intent(in):: denominator
699 end function dcdatetime_div_fr
700
701 type(dc_difftime) function dcdatetime_div_fd(diff, denominator) result(result)
703 use dc_types, only: dp
704 type(dc_difftime), intent(in):: diff
705 real(dp), intent(in):: denominator
706 end function dcdatetime_div_fd
707
708 real(dp) function dcdatetime_div_ff(diff1, diff2) result(result)
710 use dc_types, only: dp
711 type(dc_difftime), intent(in):: diff1, diff2
712 end function dcdatetime_div_ff
713 end interface
714
715 interface mod
716 type(dc_difftime) function dcdatetime_mod_ff(diff1, diff2) result(result)
717 use dc_date_types, only: dc_difftime
718 type(dc_difftime), intent(in):: diff1, diff2
719 end function dcdatetime_mod_ff
720 end interface
721
722 interface operator(==)
723 logical function dcdatetime_eq_tt(time1, time2) result(result) !:doc-priority 30:
725 type(dc_datetime), intent(in):: time1, time2
726 end function dcdatetime_eq_tt
727
728 logical function dcdatetime_eq_ff(diff1, diff2) result(result) !:doc-priority 40:
730 type(dc_difftime), intent(in):: diff1, diff2
731 end function dcdatetime_eq_ff
732
733 logical function dcdatetime_eq_if(i, diff) result(result) !:doc-priority 51:
735 type(dc_difftime), intent(in):: diff
736 integer, intent(in):: i
737 end function dcdatetime_eq_if
738
739 logical function dcdatetime_eq_fi(diff, i) result(result) !:doc-priority 52:
741 type(dc_difftime), intent(in):: diff
742 integer, intent(in):: i
743 end function dcdatetime_eq_fi
744
745 logical function dcdatetime_eq_rf(r, diff) result(result) !:doc-priority 61:
747 type(dc_difftime), intent(in):: diff
748 real, intent(in):: r
749 end function dcdatetime_eq_rf
750
751 logical function dcdatetime_eq_fr(diff, r) result(result) !:doc-priority 62:
753 type(dc_difftime), intent(in):: diff
754 real, intent(in):: r
755 end function dcdatetime_eq_fr
756
757 logical function dcdatetime_eq_df(d, diff) result(result) !:doc-priority 71:
758 use dc_types, only: dp
760 type(dc_difftime), intent(in):: diff
761 real(dp), intent(in):: d
762 end function dcdatetime_eq_df
763
764 logical function dcdatetime_eq_fd(diff, d) result(result) !:doc-priority 72:
765 use dc_types, only: dp
767 type(dc_difftime), intent(in):: diff
768 real(dp), intent(in):: d
769 end function dcdatetime_eq_fd
770
771 end interface
772
773
774 interface operator(>)
775 logical function dcdatetime_gt_tt(time1, time2) result(result) !:doc-priority 30:
777 type(dc_datetime), intent(in):: time1, time2
778 end function dcdatetime_gt_tt
779
780 logical function dcdatetime_gt_ff(diff1, diff2) result(result) !:doc-priority 40:
782 type(dc_difftime), intent(in):: diff1, diff2
783 end function dcdatetime_gt_ff
784
785 logical function dcdatetime_gt_fi(diff, factor) result(result) !:doc-priority 42:
787 type(dc_difftime), intent(in):: diff
788 integer, intent(in):: factor
789 end function dcdatetime_gt_fi
790
791 logical function dcdatetime_gt_if(factor, diff) result(result) !:doc-priority 44:
793 integer, intent(in):: factor
794 type(dc_difftime), intent(in):: diff
795 end function dcdatetime_gt_if
796 end interface
797
798 interface operator(<)
799 logical function dcdatetime_lt_tt(time1, time2) result(result) !:doc-priority 30:
801 type(dc_datetime), intent(in):: time1, time2
802 end function dcdatetime_lt_tt
803
804 logical function dcdatetime_lt_ff(diff1, diff2) result(result) !:doc-priority 40:
806 type(dc_difftime), intent(in):: diff1, diff2
807 end function dcdatetime_lt_ff
808
809 logical function dcdatetime_lt_fi(diff, factor) result(result) !:doc-priority 42:
811 type(dc_difftime), intent(in):: diff
812 integer, intent(in):: factor
813 end function dcdatetime_lt_fi
814
815 logical function dcdatetime_lt_if(factor, diff) result(result) !:doc-priority 44:
817 integer, intent(in):: factor
818 type(dc_difftime), intent(in):: diff
819 end function dcdatetime_lt_if
820 end interface
821
822 interface operator(>=)
823 logical function dcdatetime_ge_tt(time1, time2) result(result) !:doc-priority 30:
825 type(dc_datetime), intent(in):: time1, time2
826 end function dcdatetime_ge_tt
827
828 logical function dcdatetime_ge_ff(diff1, diff2) result(result) !:doc-priority 40:
830 type(dc_difftime), intent(in):: diff1, diff2
831 end function dcdatetime_ge_ff
832
833 logical function dcdatetime_ge_fi(diff, factor) result(result) !:doc-priority 42:
835 type(dc_difftime), intent(in):: diff
836 integer, intent(in):: factor
837 end function dcdatetime_ge_fi
838
839 logical function dcdatetime_ge_if(factor, diff) result(result) !:doc-priority 44:
841 integer, intent(in):: factor
842 type(dc_difftime), intent(in):: diff
843 end function dcdatetime_ge_if
844 end interface
845
846 interface operator(<=)
847 logical function dcdatetime_le_tt(time1, time2) result(result) !:doc-priority 30:
849 type(dc_datetime), intent(in):: time1, time2
850 end function dcdatetime_le_tt
851
852 logical function dcdatetime_le_ff(diff1, diff2) result(result) !:doc-priority 40:
854 type(dc_difftime), intent(in):: diff1, diff2
855 end function dcdatetime_le_ff
856
857 logical function dcdatetime_le_fi(diff, factor) result(result) !:doc-priority 42:
859 type(dc_difftime), intent(in):: diff
860 integer, intent(in):: factor
861 end function dcdatetime_le_fi
862
863 logical function dcdatetime_le_if(factor, diff) result(result) !:doc-priority 44:
865 integer, intent(in):: factor
866 type(dc_difftime), intent(in):: diff
867 end function dcdatetime_le_if
868 end interface
869
870 interface max
871 type(dc_datetime) function dcdatetime_max_tt(time1, time2) result(result) !:doc-priority 30:
873 type(dc_datetime), intent(in):: time1, time2
874 end function dcdatetime_max_tt
875
876 type(dc_difftime) function dcdatetime_max_ff(diff1, diff2) result(result) !:doc-priority 40:
878 type(dc_difftime), intent(in):: diff1, diff2
879 end function dcdatetime_max_ff
880 end interface
881
882 interface min
883 type(dc_datetime) function dcdatetime_min_tt(time1, time2) result(result) !:doc-priority 30:
885 type(dc_datetime), intent(in):: time1, time2
886 end function dcdatetime_min_tt
887
888 type(dc_difftime) function dcdatetime_min_ff(diff1, diff2) result(result) !:doc-priority 40:
890 type(dc_difftime), intent(in):: diff1, diff2
891 end function dcdatetime_min_ff
892 end interface
893
894 !-----------------------------------------------
895 ! 後方互換用
896 ! For backward compatibility
897 interface create
898 subroutine dcdatetimecreate1_bc(time, &
899 & year, mon, day, hour, min, sec, &
900 & zone, caltype, day_seconds, err) !:doc-priority 40:
901 use dc_types, only: dp
902 use dc_date_types, only: dc_datetime
903 use dc_scaledsec, only: dc_scaled_sec
904 type(dc_datetime), intent(out):: time
905 integer, intent(in), optional:: year, mon, day, hour, min
906 real(DP),intent(in), optional:: sec, day_seconds
907 character(*), intent(in), optional :: zone
908 integer, intent(in), optional:: caltype
909 logical, intent(out), optional:: err
910 end subroutine dcdatetimecreate1_bc
911
912 subroutine dcdifftimecreate1_bc(diff, &
913 & year, mon, day, hour, min, sec, day_seconds ) !:doc-priority 60:
914 use dc_types, only: dp
915 use dc_date_types, only: dc_difftime
916 use dc_scaledsec, only: dc_scaled_sec
917 type(dc_difftime), intent(out) :: diff
918 integer, intent(in), optional:: year, mon, day, hour, min
919 real(DP),intent(in), optional:: sec, day_seconds
920 end subroutine dcdifftimecreate1_bc
921
922 subroutine dcdifftimecreate2_bc(diff, value, unit, unit_symbol, err) !:doc-priority 70:
923 use dc_types, only: dp
924 use dc_date_types, only: dc_difftime
925 type(dc_difftime), intent(out) :: diff
926 real(DP), intent(in) :: value
927 character(*), intent(in) :: unit
928 integer, intent(in), optional :: unit_symbol
929 logical, intent(out), optional :: err
930 end subroutine dcdifftimecreate2_bc
931 end interface
932
933 interface putline
934 subroutine dcdatetimeputline_bc(time, unit)
935 use dc_date_types, only: dc_datetime
936 type(dc_datetime), intent(in) :: time
937 integer, intent(in), optional :: unit
938 end subroutine dcdatetimeputline_bc
939
940 subroutine dcdifftimeputline_bc(diff, unit)
941 use dc_date_types, only: dc_difftime
942 type(dc_difftime), intent(in) :: diff
943 integer, intent(in), optional :: unit
944 end subroutine dcdifftimeputline_bc
945 end interface
946
947end module dc_date_generic
type(dc_difftime) function dcdatetime_add_fd(diff, sec)
type(dc_datetime) function dcdatetime_add_tf(time, diff)
type(dc_difftime) function dcdatetime_add_ff(diff1, diff2)
type(dc_datetime) function dcdatetime_add_ft(diff, time)
type(dc_difftime) function dcdatetime_add_fr(diff, sec)
type(dc_difftime) function dcdatetime_add_fi(diff, sec)
subroutine dcdatetimecreater(time, sec)
subroutine dcdatetimecreate1_bc(time, year, mon, day, hour, min, sec, zone, caltype, day_seconds, err)
subroutine dcdifftimecreated(diff, sec)
subroutine dcdifftimecreate2r(diff, value, unit, unit_symbol, err)
subroutine dcdifftimecreatei(diff, sec)
subroutine dcdifftimecreate2d(diff, value, unit, unit_symbol, err)
subroutine dcdifftimecreater(diff, sec)
subroutine dcdifftimecreate1_bc(diff, year, mon, day, hour, min, sec, day_seconds)
subroutine dcdatetimecreatei(time, sec)
subroutine dcdatetimecreate1(time, year, mon, day, hour, min, sec, zone, zone_hour, zone_min, caltype, caltype_str, day_seconds, sclyear, sclmon, sclday, sclsec, err)
subroutine dcdatetimecreated(time, sec)
subroutine dcdifftimecreate2i(diff, value, unit, unit_symbol, err)
subroutine dcdifftimecreate2_bc(diff, value, unit, err)
subroutine dcdifftimecreate1(diff, year, mon, day, hour, min, sec, day_seconds, nondim, sclyear, sclmon, sclday, sclsec)
type(dc_difftime) function dcdatetime_div_fi(diff, denominator)
type(dc_difftime) function dcdatetime_div_fr(diff, denominator)
real(dp) function dcdatetime_div_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_div_fd(diff, denominator)
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)
subroutine dcdifftimeeval1(diff, year, mon, day, hour, min, sec, nondim, sclyear, sclmon, sclday, sclsec, sclnondim, err)
type(dc_scaled_sec) function dcdifftimeevalsclsec(diff)
real(dp) function dcdifftimeevalbyunit(diff, unit, unit_symbol)
real(dp) function dcdatetimeevalhour(time)
subroutine dcdatetimeeval1(time, year, mon, day, hour, min, sec, caltype, zone, sclyear, sclmon, sclday, sclsec)
real(dp) function dcdatetimeevalsec(time)
real(dp) function dcdifftimeevalnondim(diff)
real(dp) function dcdatetimeevalday(time)
real(dp) function dcdatetimeevalbyunit(time, unit, unit_symbol)
real(dp) function dcdifftimeevalhour(diff)
real(dp) function dcdifftimeevalmin(diff)
real(dp) function dcdatetimeevalmin(time)
type(dc_scaled_sec) function dcdatetimeevalsclsec(time)
real(dp) function dcdifftimeevalday(diff)
real(dp) function dcdifftimeevalsec(diff)
logical function dcdatetime_ge_tt(time1, time2)
logical function dcdatetime_ge_ff(diff1, diff2)
logical function dcdatetime_ge_if(factor, diff)
logical function dcdatetime_ge_fi(diff, factor)
logical function dcdatetime_gt_tt(time1, time2)
logical function dcdatetime_gt_if(factor, diff)
logical function dcdatetime_gt_fi(diff, factor)
logical function dcdatetime_gt_ff(diff1, diff2)
logical function dcdatetime_le_if(factor, diff)
logical function dcdatetime_le_tt(time1, time2)
logical function dcdatetime_le_ff(diff1, diff2)
logical function dcdatetime_le_fi(diff, factor)
logical function dcdatetime_lt_ff(diff1, diff2)
logical function dcdatetime_lt_if(factor, diff)
logical function dcdatetime_lt_fi(diff, factor)
logical function dcdatetime_lt_tt(time1, time2)
type(dc_datetime) function dcdatetime_max_tt(time1, time2)
type(dc_difftime) function dcdatetime_max_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_min_ff(diff1, diff2)
type(dc_datetime) function dcdatetime_min_tt(time1, time2)
type(dc_difftime) function dcdatetime_mod_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_mul_if(factor, diff)
type(dc_difftime) function dcdatetime_mul_rf(factor, diff)
type(dc_difftime) function dcdatetime_mul_df(factor, diff)
type(dc_difftime) function dcdatetime_mul_fd(diff, factor)
type(dc_difftime) function dcdatetime_mul_fr(diff, factor)
type(dc_difftime) function dcdatetime_mul_fi(diff, factor)
integer function dcdatetimeparseunits(str)
subroutine dcdifftimeputline_bc(diff, unit)
subroutine dcdatetimeputline_bc(time, unit)
subroutine dcdatetimesetcaltype(caltype)
subroutine dcdatetimesetsecofday(sec)
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)
character(token) function dcdatetimetocharcal(time, upcase)
character(string) function dcdatetimetochar(time)
character(string) function dcdifftimetochar(diff)
logical function dcdatetimevalidcaltype(caltype)
type(dc_difftime) function dcdatetimezonetodiff(zone)
logical function dcdatetimevalidzone(zone)
subroutine dcdatetimesetzone(time, zone, err)
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:109
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:118
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:83