datetime.datetime.strptime отсутствует в Python 2.4.1

#python #datetime

#python #datetime

Вопрос:

Наша команда обязана использовать Python 2.4.1 при определенных обстоятельствах. strptime отсутствует в datetime.datetime модуле в Python 2.4.1:

 Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)]
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.strptime
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
AttributeError: type object 'datetime.datetime' has no attribute 'strptime'
  

В отличие от 2.6:

 Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.strptime
<built-in method strptime of type object at 0x1E1EF898>
  

Вводя это, я нашел это в модуле time 2.4.1:

 Python 2.4.1 (#65, Mar 30 2005, 09:16:17) [MSC v.1310 32 bit (Intel)]
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> time.strptime
<built-in function strptime>
  

Я так понимаю, что strptime в какой-то момент он переместился? Каков наилучший способ проверить подобные вещи. Я попытался просмотреть историю выпусков python, но ничего не смог найти.

Ответ №1:

Обратите внимание, что это strptime все еще присутствует в time модуле, даже начиная с 2.7.1, а также в datetime .

Однако, если вы посмотрите на документацию для datetime в последней версии, вы увидите это в разделе strptime :

Это эквивалентно datetime(*(time.strptime(date_string, format)[0:6]))

поэтому вы можете использовать это выражение вместо этого. Обратите внимание, что в той же записи также указано «Новое в версии 2.5».

Комментарии:

1. Это все объясняет — я думал, что проверил документацию, чтобы узнать, упоминалось ли в ней, когда это было введено, но я явно пропустил это. Спасибо!

Ответ №2:

У меня тоже была похожая проблема.

Основываясь на ответе Дэниела, это работает для меня, когда вы не уверены, под какой версией Python (2.4 против 2.6) будет запущен скрипт:

 from datetime import datetime
import time

if hasattr(datetime, 'strptime'):
    #python 2.6
    strptime = datetime.strptime
else:
    #python 2.4 equivalent
    strptime = lambda date_string, format: datetime(*(time.strptime(date_string, format)[0:6]))

print strptime("2011-08-28 13:10:00", '%Y-%m-%d %H:%M:%S')
  

-Fi

Ответ №3:

новые методы обычно документируются в ссылке на библиотеку с надписью «Новости с версии ….» Я не могу вспомнить, чтобы методы исчезли или были удалены…что было бы нарушением обратной совместимости. Методы, подлежащие удалению, обычно официально не рекомендуются с предупреждением об устаревании.