How do I construct a UTC `datetime` object in Python?
Question:
I am using the datetime.datetime
class from the Python standard library. I wish to construct an instance of this class with the UTC timezone. To do so, I gather that I need to pass as the tzinfo
argument to the datetime
constructor some instance of the tzinfo
class.
The documentation for the tzinfo
class says that:
tzinfo
is an abstract base class, meaning that this class should not be instantiated directly. You need to derive a concrete subclass, and (at least) supply implementations of the standard tzinfo
methods needed by the datetime
methods you use. The datetime
module does not supply any concrete subclasses of tzinfo
.
Now I’m stumped. All I want to do is represent “UTC”. I should be able to do that using approximately three characters, like this
import timezones
...
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC)
In short, I’m not going to do what the documentation tells me to do. So what’s my alternative?
Answers:
I used a lot in pytz and very satisfied from this module.
pytz
pytz
brings the Olson tz
database into Python. This library allows
accurate and cross platform timezone calculations using Python 2.4
or higher. It also solves the issue of ambiguous times at the end
of daylight saving time, which you can read more about in the Python
Library Reference (datetime.tzinfo
).
Also I would recommend for reading: Understanding DateTime, tzinfo, timedelta & TimeZone Conversions in python
There are fixed-offset timezones in the stdlib since Python 3.2:
from datetime import datetime, timezone
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc)
Constructor is :
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Docs link.
Though it is easy to implement utc timezone on earlier versions:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
class UTCtzinfo(tzinfo):
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
utc = UTCtzinfo()
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=utc)
I am using the datetime.datetime
class from the Python standard library. I wish to construct an instance of this class with the UTC timezone. To do so, I gather that I need to pass as the tzinfo
argument to the datetime
constructor some instance of the tzinfo
class.
The documentation for the tzinfo
class says that:
tzinfo
is an abstract base class, meaning that this class should not be instantiated directly. You need to derive a concrete subclass, and (at least) supply implementations of the standardtzinfo
methods needed by thedatetime
methods you use. Thedatetime
module does not supply any concrete subclasses oftzinfo
.
Now I’m stumped. All I want to do is represent “UTC”. I should be able to do that using approximately three characters, like this
import timezones
...
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC)
In short, I’m not going to do what the documentation tells me to do. So what’s my alternative?
I used a lot in pytz and very satisfied from this module.
pytz
pytz
brings the Olsontz
database into Python. This library allows
accurate and cross platform timezone calculations using Python 2.4
or higher. It also solves the issue of ambiguous times at the end
of daylight saving time, which you can read more about in the Python
Library Reference (datetime.tzinfo
).
Also I would recommend for reading: Understanding DateTime, tzinfo, timedelta & TimeZone Conversions in python
There are fixed-offset timezones in the stdlib since Python 3.2:
from datetime import datetime, timezone
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc)
Constructor is :
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Docs link.
Though it is easy to implement utc timezone on earlier versions:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
class UTCtzinfo(tzinfo):
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
utc = UTCtzinfo()
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=utc)