cyr_guesstz
build and query the timezone guessing database
Synopsis
cyr_guesstz -z zoneinfo [ -r timerange ] dbfile cyr_guesstz -p [ -r timerange ] dbfile cyr_guesstz [ -r timerange ] dbfile
Description
cyr_guesstz builds and queries the database that Cyrus uses to recognise IANA timezone names in VTIMEZONE components which do have a non-IANA timezone identifier.
Calendar clients sometimes send events with a made-up TZID such as
Custom or GMT+0100 (Mitteleuropäische Zeit), along with the observance
rules that describe it. JMAP CalendarEvent objects need an IANA name, so Cyrus
compares those rules against every timezone in this database and reports the
name whose observance onsets and UTC offsets match.
make install builds the database as
zoneinfo_dir/guesstz.db from the time zone data it installs,
so most installations never need to run this command. Run it by hand after
updating zoneinfo_dir yourself -- an out-of-date database is not
an error, it just makes Cyrus fail to recognise recently changed timezones.
Two timezones are considered equal when their observances match over a time range, so the database records a range rather than the whole of history. The range used to build a database is also the widest range that can be queried against it.
Unlike most Cyrus commands, cyr_guesstz does not read imapd.conf(5); name the database file explicitly.
Options
- -z zoneinfo, --zoneinfo=zoneinfo
Create the database from the VTIMEZONEs in the zoneinfo directory, which is searched recursively. Files that do not parse as iCalendar are reported and skipped. The IANA version is read from the version file in that directory, and recorded as "unknown" if there is none.
- -p, --print
Print the database as JSON on standard output.
- -r timerange, --timerange=timerange
The time range over which to expand observances, as two UTC date-times separated by a solidus, each formatted as defined by "FORM #2" in RFC 5545, Section 3.3.5. The start time is part of the range and the end time is not, so an observance onset at exactly the end time is not expanded.
The default range is
20000101T000000Z/20640101T000000Z: from the zero hour of January 1, 2000 up to, but not including, the zero hour of January 1, 2064.
Examples
cyr_guesstz -z /usr/share/cyrus-imapd/zoneinfo guesstz.db
Build a database from an installed zoneinfo directory.
cyr_guesstz guesstz.db < event.ics
Print the IANA name of each VTIMEZONE read from standard input, or
unknownfor those that match nothing.
cyr_guesstz -p guesstz.db | less
Inspect the contents of a database.
Files
<zoneinfo_dir>/guesstz.db
See Also
ctl_zoneinfo(8), imapd.conf(5), httpd(8)