Go to the source code of this file.
◆ dcdatetimesetzone()
subroutine dcdatetimesetzone |
( |
type(dc_datetime), intent(inout) |
time, |
|
|
character(*), intent(in) |
zone, |
|
|
logical, intent(out), optional |
err |
|
) |
| |
Definition at line 13 of file dcdatetimezone.f90.
References dc_error::dc_ebadtimezone, dc_error::dc_noerr, dc_error::storeerror(), and dc_types::string.
25 &
operator(-),
operator(+)
27 use dc_message
, only: messagenotify
28 use dc_trace
, only: beginsub, endsub
29 use dc_string
, only: stoi
31 type(dc_datetime),
intent(inout):: time
32 character(*),
intent(in):: zone
33 logical,
intent(out),
optional:: err
34 type(dc_difftime):: diff, diff_in
36 character(STRING) :: zone_in, cause_c
37 character(*),
parameter :: subname =
'DCDateTimeSetZone' 39 call beginsub(subname,
'time=%c, zone=%c', &
40 & c1=trim(
tochar(time)), c2=trim(zone))
44 if (.not. validzone(zone))
then 47 if (
present(err))
then 48 call messagenotify(
'W', subname, &
49 &
'zone=<%c> is invalid.', &
56 call eval(time, zone = zone_in)
57 diff_in = zonetodiff(zone_in)
58 diff = zonetodiff(zone)
60 time = time + (diff_in - diff)
65 call endsub(subname,
'time=%c', &
integer, parameter, public dc_ebadtimezone
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
Provides kind type parameter values.
integer, parameter, public string
Character length for string.
◆ dcdatetimevalidzone()
logical function dcdatetimevalidzone |
( |
character(*), intent(in) |
zone | ) |
|
Definition at line 98 of file dcdatetimezone.f90.
106 character(*),
intent(in):: zone
110 if (len(zone) < 6)
return 111 if (verify(zone(1:1),
'+-') /= 0)
return 112 if (verify(zone(2:3),
'1234567890') /= 0)
return 113 if (verify(zone(5:6),
'1234567890') /= 0)
return 114 if (zone(4:4) /=
':')
return
◆ dcdatetimezonetodiff()
type(dc_difftime) function dcdatetimezonetodiff |
( |
character(*), intent(in) |
zone | ) |
|
Definition at line 70 of file dcdatetimezone.f90.
77 use dc_string
, only: stoi
79 type(dc_difftime):: diff
80 character(*),
intent(in):: zone
81 integer:: hour,
min, sgn
83 if (.not. validzone(zone))
then 86 if (zone(1:1) ==
'-')
then 91 hour = stoi(zone(2:3))