Skip to main content

Sphinx extension to convert times to browsers local times

Project description

sphinx-localtime: automatic local timezone HTML conversion

This allows you to define a time with a timezone, and HTML renders will show it converted to the apparent local timezone, with a tooltip with the original time.

How it works:

  • The role contains a date and optional format:

    :localtime:`10:00 August 8, 2024 +03:00`
    :localtime:`10:00 August 8, 2024 +03:00 (HH:mm)`
    
  • At build time (all server-side), python-dateutil parses those dates and converts it to UTC.

  • It embeds the UTC timestamp and some javascript into the built HTML file. When rendered, dayjs converts it to HH:mm or the format in parentheses.

Installation

pip install sphinx-localtime

Add sphinx_localtime to extensions in conf.py

Examples

Show time in hh:mm:

The meeting is at :localtime:`13 Aug 2024 10:00:00 +03:00`.

Show time as hh:mm (on YYYY-MM-DD). [] is used to escape raw text - this is dayjs syntax:

The course starts at :localtime:`13 Aug 2024 10:00:00
+03:00 (hh:mm [on ]YYYY-MM-DD[)])`

You can show the detected timezone at a certain time with the format zzz:

The times on this page are automatically converted by your
browser into the timezone :localtime:`13 Aug 2024 (zzz)`.

Usage

The time format can be anything parsed by dateutil.parser.parse. A parenthesized time format (in the form in https://day.js.org/docs/en/display/format) is used for the output. The default output format is HH:mm. Note the escapes aren't printf standard but what is used by dayjs.

ReST::

:localtime:`13 Aug 2024 10:00:00 +03:00`
:localtime:`13 Aug 2024 10:00:00 +03:00  (D MMM HH:mm)`

:localtime:`13 Aug 2024  (zzz)`

MyST:

{localtime}`13 Aug 2024 10:00:00 +03:00`
{localtime}`13 Aug 2024 10:00:00 +03:00  (D MMM HH:mm)`

{localtime}`13 Aug 2024 (zzz)`

Rendered:

10:00
13 Aug 10:00

Eastern European Summer Time

Specifying timezones in the source

Currently it is safest to use formats such as +03:00, for example 13 Aug 2024 10:00 +03:00.

In order for the conversion to work, you need to specify a timezone in your original date in a format that dateutil.parser.parse can understand. This seems to be harder than it looks (if anyone can help: please do!). What we know:

  • Using +03:00 and similar seems safe.
  • Using long names like Europe/Helsinki would be good but dateutil.parser.parse doesn't recognize them.
  • Short abbreviations like EDT, EEST should work, but only for some common ones, and it seems that all the summer/daylight saving ones don't. One could generate a list of all abbreviations, but they aren't necessarily unique. (Anything listed in pytz.all_timezones_set should work).
    • It does work for your local timezone. So it'll act differently on different build hosts...
    • Short non-summer time names are wrong when used in summer time.

Currently it is safest to use formats such as +03:00.

In conf.py you can set a default, then you don't need to add a timezone to every individual localtime role:

import dateutil.tz
localtime_default_tz = dateutil.tz.gettz('Europe/Helsinki')

Status and development

Beta but being used in our own production. Contributions welcome.

Big issues:

  • Non-HTML builders work but don't give the most useful output - but it does show something minimally useful so people know what the time is, without localtime conversion.
  • Timezone abbreviation lookup could be improved.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sphinx_localtime-0.1.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sphinx_localtime-0.1.1-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file sphinx_localtime-0.1.1.tar.gz.

File metadata

  • Download URL: sphinx_localtime-0.1.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for sphinx_localtime-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fdca5a8800b05d08743dc6ea8baed5d7beba82a941365a95e1e083ec6b8c9328
MD5 0527181b203dbc1135e9ed46d0428459
BLAKE2b-256 a713add99c74a497d4dcb438fe69325892700506740271728a75d1ec9dd42b01

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_localtime-0.1.1.tar.gz:

Publisher: release.yml on coderefinery/sphinx-localtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphinx_localtime-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sphinx_localtime-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6faa834fdbe3b65b6334a1de02995ca3657b4fc8fa19f9ddc0476ee52819c57e
MD5 6ec691a89e5a8441133be94d0eb32ceb
BLAKE2b-256 381fd8cdd46defb1afe9afe6152e6dc984785bc5c723f6c136eecdb212cf25b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_localtime-0.1.1-py3-none-any.whl:

Publisher: release.yml on coderefinery/sphinx-localtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page