TZSET(3) | Library Functions Manual | TZSET(3) |
tzset
, tzalloc
,
tzgetname
, tzgetgmtoff
,
tzfree
—
#include <time.h>
timezone_t
tzalloc
(const
char *zone);
void
tzfree
(timezone_t
restrict tz);
const char *
tzgetname
(timezone_t
restrict tz, int
isdst);
long
tzgetgmtoff
(timezone_t
restrict tz, int
isdst);
void
tzset
(void);
tzalloc
() function takes as an argument a timezone
name and returns a timezone_t object suitable to be used
in the ctime_rz
(),
localtime_rz
(), and mktime_z
()
functions.
If tz is not a valid timezone description,
or if the object cannot be allocated, tzalloc
()
returns a NULL
pointer and sets
errno.
A NULL
pointer may be passed to
tzalloc
() instead of a timezone name, to refer to
the current system timezone. An empty timezone string indicates Coordinated
Universal Time (UTC).
Note that instead of setting the environment variable
TZ, and globally changing the behavior of the calling
program, one can use multiple timezones at the same time by using separate
timezone_t objects allocated by
tzalloc
() and calling the “z” variants
of the functions. The tzfree
() function deallocates
tz, which was previously allocated by
tzalloc
(). This invalidates any
tm_zone pointers that tz was
used to set. The function tzgetname
() returns the
name for the given tz. If isdst
is 0, the call is equivalent to
tzname[0]. If isdst is set to
1 the call is equivalent to
tzname[1]. The return values for both
tzgetname
() and tzgmtoff
()
correspond to the latest time for which data is available, even if that
refers to a future time. Finally, the tzgetgmtoff
()
function acts like tzgetname
() only it returns the
offset in seconds from GMT for the timezone. If there is no match, then
-1
is returned and errno is
set to ESRCH
. The tzset
()
function acts like tzalloc(getenv("TZ"))
,
except it saves any resulting timezone object into internal storage that is
accessed by localtime
(),
localtime_r
(), and mktime
().
The anonymous shared timezone object is freed by the next call to
tzset
(). If the implied call to
tzalloc
() fails, tzset
()
falls back on Universal Time (UT). If TZ
is
NULL
, the best available approximation to local
(wall clock) time, as specified by the
tzfile(5) format file
/etc/localtime is used by
localtime(3). If
TZ
appears in the environment but its value is the
empty string, UT is used, with the abbreviation “UTC” and
without leap second correction; please see
ctime(3). If
TZ
is nonnull and nonempty:
When TZ
is used as a pathname, if it
begins with a slash, it is used as an absolute pathname; otherwise, it is
used as a pathname relative to /usr/share/zoneinfo.
The file must be in the format specified in
tzfile(5).
When TZ
is used directly as a
specification of the time conversion information, it must have the following
syntax (spaces inserted for clarity):
std
offset
[dst
[offset
] [,rule
] ]
where:
std
and dst
std
) or the alternative
(dst
such as daylight saving time) timezone. Only
std
is required; if dst
is
missing, then daylight saving time does not apply in this locale. Upper-
and lowercase letters are explicitly allowed. Any characters except a
leading colon (:), digits, comma (,), minus (-), plus (+), and NUL bytes
are allowed. Alternatively, a designation can be surrounded by angle
brackets <
and >
; in
this case, the designation can contain any characters other than
>
and NUL
.offset
offset
has the
form:
hh
[:mm
[:ss
] ]
The minutes (mm
) and seconds
(ss
) are optional. The hour
(hh
) is required and may be a single digit. The
offset
following std
is
required. If no offset
follows
dst
, daylight saving time is assumed to be one
hour ahead of standard time. One or more digits may be used; the value
is always interpreted as a decimal number. The hour must be between zero
and 24, and the minutes (and seconds) – if present –
between zero and 59. If preceded by a “-” the timezone
shall be east of the Prime Meridian; otherwise it shall be west (which
may be indicated by an optional preceding “+”).
rule
rule
has the form:
date
/time
,date
/time
where the first date
describes when
the change from standard to daylight saving time occurs and the second
date
describes when the change back happens.
Each time
field describes when, in current local
time, the change to the other time is made. As an extension to POSIX,
daylight saving is assumed to be in effect all year if it begins January
1 at 00:00 and ends December 31 at 24:00 plus the difference between
daylight saving and standard time, leaving no room for standard time in
the calendar. The format of date is one of the
following:
J
nM
m.n.dtime
has the same format as
offset
except that POSIX does not allow a leading
sign “-” or “+” is allowed. As an extension to
POSIX, the hours part of time
can range from -167
through 167; this allows for unusual rules such as “the Saturday
before the first Sunday of March”. The default, if
time
is not given, is
02:00:00
.Here are some examples of TZ values that directly specify the timezone rules; they use some of the extensions to POSIX.
If no rule
is present in
TZ
, the rules specified by the
tzfile(5) format file
posixrules in
/usr/share/zoneinfo are used, with the standard and
daylight saving time offsets from UT replaced by those specified by the
offset
values in TZ
.
For compatibility with System V Release 3.1, a semicolon (;) may
be used to separate the rule
from the rest of the
specification.
If /usr/share/zoneinfo/GMT is absent, UTC leap seconds are loaded from /usr/share/zoneinfo/posixrules.
tzset
() function conforms to IEEE
Std 1003.1-1988 (“POSIX.1”).
tzgetname
() nor
tzgmtoff
() functions have the ability to specify the
point in time for which the requested data should be returned.
July 2, 2019 | NetBSD 9.2 |