Skip to content

Document timezone support #2886

Closed
@TarantoolBot

Description

@TarantoolBot

Product: Tarantool
Since:
Root document: https://www.tarantool.io/en/doc/latest/reference/reference_lua/
SME: @ ligurio

Related to #2574

Details

Timezones support

Tarantool uses IANA tzdata aka Olson DB facilities for timezone
resolution at the moment of parsing of datetime literals or while
parsing tz attribute in constructor, or :set{} method call.

In addition to the tzoffset we provided before, we now define
tzindex, the unique index assigned by Tarantool to each known IANA
timezone.

date = require 'datetime'

tarantool> T = date.parse '2022-01-01T00:00 Europe/Moscow'

tarantool> T.tzindex
---
- 947
...

tarantool> T.tzoffset
---
- 180
...

tarantool> T.tz
---
- Europe/Moscow
...

Now date.isdst field (alone and as part of :totable() table) is
correctly calculated using tzindex and attributes of the selected
timezone in the Olson DB timezone.

tarantool> date.parse('2004-06-01T00:00 Europe/Moscow').isdst
---
- true
...

tarantool> date.parse('2004-12-01T00:00 Europe/Moscow'):totable()
---
- sec: 0
  min: 0
  yday: 336
  day: 1
  nsec: 0
  isdst: false
  wday: 4
  tzoffset: 180
  month: 12
  year: 2004
  hour: 0
...

All timezone names and abbreviations, known to the current Tarantool
version are available via datetime.TZ bidirectional array.

print(date.TZ['Europe/Moscow']) -- 947
print(date.TZ[947]) -- Europe/Moscow

Limitations

There were moments in past history, when local mean time in some
partcular zone used timezone offset not representable in whole
minutes, but rather in seconds, i.e. in Moscow before 1918 there
used to be offset +2 hours 31 minutes and 19 seconds. Please see
Olson dump for this period

$ ./src/lib/tzcode/install/usr/bin/zdump -c1880,1918 -i Europe/Moscow

TZ="Europe/Moscow"
-       -       +023017 MMT
1916-07-03      00:01:02        +023119 MMT
1917-07-02      00      +033119 MST     1
1917-12-27      23      +023119 MMT

Modern tzdata rules do not use such tiny fraction, and all timezones differ
to UTC in units measured in minutes, not seconds. Tarantool datetime uses
minutes internally as units for tzoffset so there is some loss of
precision if you try to operate with such ancient timestamps.
Requested by @ tsafin in tarantool/tarantool@979a8fb.

Metadata

Metadata

Assignees

Labels

datetimefeatureA new functionalityreference[location] Tarantool manual, Reference partserver[area] Task relates to Tarantool's server (core) functionality

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions