gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
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)
Convert DC_DATETIME, DC_DIFFTIME to character strings.
character(string) function dcdifftimetochar(diff)
Interface declarations for procedures provided from dc_date.
Derived types and parameters for date and time.
integer, parameter, public cal_noleap
Calendar without leap years (365 days per year)
integer, parameter, public cal_cyclic
Cyclic calendar (30.6 days per month)
integer, parameter, public cal_gregorian
Gregorian calendar
integer, parameter, public cal_julian
Julian calendar
Message output module.
Judge optional control parameters.
logical function, public present_and_true(arg)
Scaled seconds module for precise time operations.
Handling character types.
Definition dc_string.f90:83
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public token
Character length for word, token
Definition dc_types.f90:128
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92
integer, parameter, public string
Character length for string
Definition dc_types.f90:137