Скажем, у меня есть переменная t, это установлено на это:
datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)
Если я говорю str(t)
, я добираюсь:
'2009-07-10 18:44:59.193982+00:00'
Как я могу получить подобную строку, кроме печатного в локальном часовом поясе, а не UTC?
Думаю, вам следует осмотреться: datetime.astimezone ()
http://docs.python.org/library/datetime.html#datetime.datetime.astimezone
См. Также модуль pytz - его довольно легко использовать - например:
eastern = timezone('US/Eastern')
Пример:
from datetime import datetime
import pytz
from tzlocal import get_localzone # $ pip install tzlocal
utc_dt = datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=pytz.utc)
print(utc_dt.astimezone(get_localzone())) # print local time
# -> 2009-07-10 14:44:59.193982-04:00
На днях я написал что-то вроде этого:
import time, datetime
def nowString():
# we want something like '2007-10-18 14:00+0100'
mytz="%+4.4d" % (time.timezone / -(60*60) * 100) # time.timezone counts westwards!
dt = datetime.datetime.now()
dts = dt.strftime('%Y-%m-%d %H:%M') # %Z (timezone) would be empty
nowstring="%s%s" % (dts,mytz)
return nowstring
Так что интересная часть для вас, вероятно, это строка, начинающаяся с "mytz = ...". time.timezone возвращает местный часовой пояс, хотя и с противоположным знаком по сравнению с UTC. Таким образом, он говорит "-3600", чтобы выразить UTC + 1.
Несмотря на его игнорирование перехода на летнее время (DST, см. Комментарий), я оставляю это для людей, которые возятся с time.timezone
.