Python datetime add - программирование
Подтвердить что ты не робот

Python datetime add

У меня есть значение datetime в строковом формате. Как изменить формат с "-" отделившейся даты на ".". дата разделения. Мне также нужно добавить 6 часов, чтобы данные были в моем часовом поясе.

s = '2013-08-11 09:48:49'
from datetime import datetime,timedelta
mytime = datetime.strptime(s,"%Y-%m-%d %H:%M:%S")
time = mytime.strftime("%Y.%m.%d %H:%M:%S")
dt = str(timedelta(minutes=6*60))  #6 hours
time+=dt
print time
print dt

Я получаю следующий результат, когда он добавляет шесть часов в конце, а не в девять:

2013.08.11 09:48:496:00:00
6:00:00
4b9b3361

Ответ 1

Вы добавляете строковое представление timedelta():

>>> from datetime import timedelta
>>> print timedelta(minutes=6*60)
6:00:00

Сумма datetime и timedelta объектов, а не их строковых представлений; только создайте строку после, суммируя объекты:

from datetime import datetime, timedelta
s = '2013-08-11 09:48:49'
mytime = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
mytime += timedelta(hours=6)
print mytime.strftime("%Y.%m.%d %H:%M:%S")

Это приводит к:

>>> from datetime import datetime, timedelta
>>> s = '2013-08-11 09:48:49'
>>> mytime = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
>>> mytime += timedelta(hours=6)
>>> print mytime.strftime("%Y.%m.%d %H:%M:%S")
2013.08.11 15:48:49

Однако вы, вероятно, захотите использовать объекты реального времени, вместо этого я рекомендую использовать библиотеку pytz:

>>> from pytz import timezone, utc
>>> eastern = timezone('US/Eastern')
>>> utctime = utc.localize(datetime.strptime(s, "%Y-%m-%d %H:%M:%S"))
>>> local_tz = utctime.astimezone(eastern)
>>> print mytime.strftime("%Y.%m.%d %H:%M:%S")
2013.08.11 15:48:49

Это также учитывает, например, летнее время.