gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dcdatetimetochar.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!-----------------------------------------------------------------------
21
52function dcdatetimetochar(time) result(result)
53
54 use dc_types, only: string, token, dp
55 use dc_string, only: tochar, cprintf, stoa
56 use dc_date_generic, only: eval
57 use dc_date_types, only: dc_datetime
58 use dc_message, only: messagenotify
59 implicit none
60 character(STRING):: result
61 type(dc_datetime), intent(in):: time
62
63 integer :: year, mon, day, hour, min, csec_len
64 real(dp):: sec
65 character(TOKEN) :: zone
66 character(STRING) :: csec
67continue
68
69 call eval(time, &
70 & year=year, mon=mon, day=day, hour=hour, min=min, sec=sec, zone=zone)
71
72 csec = tochar(sec)
73 if ( trim(csec) == '-0.' ) csec = '0.'
74 do while ( index('123456789.', csec(len_trim(csec):len_trim(csec)) ) == 0 )
75 if ( len_trim(csec) < 2 ) exit
76 csec = csec(1:len_trim(csec)-1)
77 end do
78 if (int(sec) > -1 .and. int(sec) < 10) then
79 if (len_trim(csec) >= len(csec)) then
80 csec = '0' // trim(csec(1:len(csec) - 1))
81 else
82 csec = '0' // trim(csec)
83 end if
84 end if
85 csec_len = len(trim(adjustl(csec)))
86 if (csec(csec_len:csec_len) == '.') csec = csec(1:csec_len-1)
87
88 result = cprintf('%04d-%02d-%02dT%02d:%02d:%c%c', &
89 & i=(/year, mon, day, hour, min/), &
90 & c1=trim(csec), c2=trim(zone))
91
92end function dcdatetimetochar
93
94
147function dcdifftimetochar(diff) result(result)
148
149 use dc_types, only: string, dp
150 use dc_string, only: tochar, cprintf, stoa
151 use dc_date_generic, only: eval
152 use dc_date_types, only: dc_difftime
153 use dc_scaledsec, only: assignment(=)
154 implicit none
155 character(STRING):: result
156 type(dc_difftime), intent(in):: diff
157
158 integer :: year, mon, day, hour, min, csec_len
159 real(dp):: sec
160 character(STRING) :: csec
161 character(1) :: pm
162continue
163
164 if ( .not. diff % nondim_flag ) then
165 call eval(diff, year=year, mon=mon, day=day, hour=hour, min=min, sec=sec)
166
167 if ( year < 0 .or. mon < 0 .or. day < 0 .or. &
168 & hour < 0 .or. min < 0 .or. sec < 0 ) then
169 year=abs(year) ; mon=abs(mon) ; day=abs(day)
170 hour=abs(hour) ; min=abs(min) ; sec=abs(sec)
171 pm = '-'
172 else
173 pm = '+'
174 end if
175
176 csec = tochar(sec)
177 if ( trim(csec) == '-0.' ) csec = '0.'
178 do while ( index('123456789.', csec(len_trim(csec):len_trim(csec)) ) == 0 )
179 if ( len_trim(csec) < 2 ) exit
180 csec = csec(1:len_trim(csec)-1)
181 end do
182 if (int(sec) > -1 .and. int(sec) < 10) then
183 if (len_trim(csec) >= len(csec)) then
184 csec = '0' // trim(csec(1:len(csec) - 1))
185 else
186 csec = '0' // trim(csec)
187 end if
188 end if
189 csec_len = len(trim(adjustl(csec)))
190 if (csec(csec_len:csec_len) == '.') csec = csec(1:csec_len-1)
191
192 result = cprintf('%c%04d-%02d-%02dT%02d:%02d:%c', &
193 & i=(/year, mon, day, hour, min/), &
194 & c1=pm, c2=trim(csec))
195 else
196 sec = diff % sec
197 result = tochar( sec )
198 end if
199
200end function dcdifftimetochar
201
243function dcdatetimetocharcal(time, upcase) result(result)
244
245 use dc_types, only: token
247 use dc_date_types, only: dc_datetime, &
249 use dc_string, only: toupper
250 character(TOKEN) :: result
251 type(dc_datetime), intent(in):: time
252 logical, intent(in), optional:: upcase
253continue
254 select case( time % caltype )
255 case(cal_cyclic)
256 result = 'cyclic'
257 case(cal_noleap)
258 result = 'noleap'
259 case(cal_julian)
260 result = 'julian'
261 case(cal_gregorian)
262 result = 'gregorian'
263 case default
264 result = 'none'
265 end select
266
267 if ( present_and_true(upcase) ) then
268 call toupper(result) ! (inout)
269 end if
270
271end function dcdatetimetocharcal
character(token) function dcdatetimetocharcal(time, upcase)
character(string) function dcdatetimetochar(time)
dc_date_types::DC_DATETIME, dc_date_types::DC_DIFFTIME 型変数の文字変換
character(string) function dcdifftimetochar(diff)
dc_date より提供される手続の引用仕様宣言
日付・時刻に関する構造データ型と定数
integer, parameter, public cal_noleap
閏年無しの暦 (1年 365 日)
integer, parameter, public cal_cyclic
周期暦 (1ヶ月 30.6 日)
integer, parameter, public cal_gregorian
グレゴリオ暦
integer, parameter, public cal_julian
ユリウス暦
メッセージの出力
省略可能な制御パラメータの判定
logical function, public present_and_true(arg)
精密な時間演算のための秒スケールモジュール
文字型変数の操作
Definition dc_string.f90:83
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:128
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:92
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:137