Right now I use
import datetime
print(datetime.datetime.now().strftime("%X"))
to display the current time as a string.
Problem is, my computer is running in Europe/Berlin
time zone, and the offset of +2 to UTC is not accounted here.
Instead of 19:22:26
it should display 21:22:26
Also different to the other answers I found here, I do not store it by calling
datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)
but
datetime.datetime.now()
so I tried (and failed) the following:
>>> from pytz import timezone
>>> datetime.datetime.now().astimezone(timezone('Europe/Berlin'))
ValueError: astimezone() cannot be applied to a naive datetime
Can't post as answer, as this question is marked closed
The server I had this issue with doesn't exists any longer. Anyway, here are some other things worth checking:
To get the current time in the local timezone as a naive datetime object:
from datetime import datetime
naive_dt = datetime.now()
If it doesn't return the expected time then it means that your computer is misconfigured. You should fix it first (it is unrelated to Python).
To get the current time in UTC as a naive datetime object:
naive_utc_dt = datetime.utcnow()
To get the current time as an aware datetime object in Python 3.3+:
from datetime import datetime, timezone
utc_dt = datetime.now(timezone.utc) # UTC time
dt = utc_dt.astimezone() # local time
To get the current time in the given time zone from the tz database:
import pytz
tz = pytz.timezone('Europe/Berlin')
berlin_now = datetime.now(tz)
It works during DST transitions. It works if the timezone had different UTC offset in the past i.e., it works even if the timezone corresponds to multiple tzinfo objects at different times.