I created a class inheriting from datetime.datetime
.
While creating a new instance using the classmethod fromtimestamp
it seems to work, except if I provide a timezone
object. In such case, the returned object is of base type datetime
.
import time
from datetime import datetime, timezone
class MyDatetime(datetime):
pass
MyDatetime.fromtimestamp(time.time())
# MyDatetime(2018, 11, 30, 18, 8, 36, 418105)
# <class '__main__.MyDatetime'>
MyDatetime.fromtimestamp(time.time(), tz=timezone.utc)
# datetime.datetime(2018, 11, 30, 17, 8, 50, 667385, tzinfo=datetime.timezone.utc)
# <class 'datetime.datetime'>
This seems surprising. I don't see any mention of such weird behavior in the documentation, am I missing something or is it a Python bug?
Now it works correctly as expected.
Added an alternative option ZoneInfo
import time
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
class MyDatetime(datetime):
pass
print('My local time (GMT+5)')
print(type(MyDatetime.fromtimestamp(time.time())))
print(MyDatetime.fromtimestamp(time.time()))
print()
print('Time UTC using timezone')
print(type(MyDatetime.fromtimestamp(time.time(), tz=timezone.utc)))
print(MyDatetime.fromtimestamp(time.time(), tz=timezone.utc))
print()
print('Time UTC using ZoneInfo')
print(type(MyDatetime.fromtimestamp(time.time(), ZoneInfo('UTC'))))
print(MyDatetime.fromtimestamp(time.time(), ZoneInfo('UTC')))
Result:
My local time (GMT+5)
<class '__main__.MyDatetime'>
2024-09-22 22:29:03.734214
Time UTC using timezone
<class '__main__.MyDatetime'>
2024-09-22 17:29:03.734259+00:00
Time UTC using ZoneInfo
<class '__main__.MyDatetime'>
2024-09-22 17:29:03.734683+00:00