adafruit / Adafruit_CircuitPython_datetime

Basic date and time types. Implements a subset of the CPython datetime module.
MIT License
4 stars 9 forks source link

TZ and zoneinfo support #26

Open AndreyNikiforov opened 3 months ago

AndreyNikiforov commented 3 months ago

What is the correct way to convert datetime (utc) to [arbitrary] timezone? Looks like this lib supports neither zoneinfo module nor astimezone() method...

Example I would like to run in CircuitPython:

from datetime import timezone
LOS_ANGELES = ZoneInfo("America/Los_Angeles")
dt_utc = datetime(2020, 11, 1, 8, tzinfo=timezone.utc)

# Before the PDT -> PST transition
print(dt_utc.astimezone(LOS_ANGELES))

# After the PDT -> PST transition
print((dt_utc + timedelta(hours=1)).astimezone(LOS_ANGELES))
FoamyGuy commented 2 weeks ago

To the best of my knowledge the timezone support is limited. There is code in a test here that shows how to convert from the default UTC time into an arbitrary timezone: https://github.com/adafruit/Adafruit_CircuitPython_datetime/blob/3381501ba0221a79bd2ec3bbee1c24554e5c9919/tests/test_datetime.py#L898

After doing so the tzinfo will be set on your object and if you call isoformat() it will output the timestamp with a timezone offset e.g. 2024-11-14T15:49:04-04:00

You could theoretically use timedelta with utcoffset to get the time in the specified timezone, but I do not believe we currently have any support for something more convenient like astimezone(). We would welcome a PR from anyone who wants to add more timezone support that matches cpython.