Рядок дати Python для об'єкта дати


345

Як перетворити рядок в об'єкт дати в python?

Рядок буде: "24052010"( що відповідає формату: "%d%m%Y")

Я не хочу об'єкт datetime.datetime, а скоріше datetime.date.

Відповіді:


586

Ви можете використовувати strptimeв datetimeпакеті Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

Я намагаюся подібний процес, за винятком того, що для мого рядка введення немає року, тому він виглядає як "2405". За замовчуванням рік приймається як 1900. Проблема виникає під час розбору дати лютого типу "2902". Я отримую цю помилку ValueError: day is out of range for month. Не впевнений, як я можу встановити рік за замовчуванням під час розбору.
Shubham Naik


59

Прямо пов'язане питання:

Що робити, якщо є

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

і ви отримуєте:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

і ти спробував:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

але ви все одно отримаєте прослідку вище.

Відповідь:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))

1
2015-07-20 09: 46: 55 + 00: 00 У мене є такі дані, як отримати об’єкт дати?
Hardik Gajjar

Використовуйте модуль re (регулярний вираз), щоб змінити свої дані з "2015-07-20 09: 46: 55 + 00: 00" на "2015-07-20T09: 46: 55-00: 00". Потім використовуйте dateutil.parse для отримання об’єкта дати.
Шопенгауер

1
Дякую, насправді проблема була об'єктом типу dict, і я просто отримав рішення, використовуючи dict.get, використовуючи
Hardik Gajjar

2
Інша ідея - прочитати посібник docs.python.org/3/library/… і помітити, що% B означає "Місяць як повне ім'я мови". який як "січень" або "грудень", так "02" не збирається розбирати.
Фліп

1
Рядок формату дати в цьому неправильний, він повинен бути% m не% B
theannouncer

24

Якщо ви лінивий і не хочете боротися зі строковими літералами, можете просто перейти з parserмодулем.

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

Тільки бічна примітка , оскільки ми намагаємося відповідати anyрядковій репрезентації, це в 10 разів повільніше, ніжstrptime


дуже просто рішення, дякую. Я намагався перетворити довгу дату в Excel, яка відображалася якMonday, June 03, 2019
Джефф Блумел

5

у вас є такий рядок дати, як "24052010", і ви хочете для цього об'єкт дати,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

цей cus_date дасть вам об’єкт дати.

ви можете отримати рядок дати з об’єкта дати за допомогою цього,

cus_date.strftime("%d%m%Y")

3

Є ще одна бібліотека, яка називається arrowдійсно чудовою, щоб зробити маніпуляції на дату python.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

Використовуйте модуль часу для перетворення даних.

Фрагмент коду:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.