Как преобразовать строку, содержащую AM / PM в datetime в python, используя% p - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно преобразовать строку, отформатированную как '2000-01-01 12:00:00 AM', но это не имеет значения, если это AM или PM, результат тот же (см. Пример ниже).

from datetime import datetime
frmt = '%Y-%d-%m %H:%M:%S %p'
datetime.strptime('2000-01-01 12:00:00 AM', frmt).isoformat()
datetime.strptime('2000-01-01 12:00:00 PM', frmt).isoformat()

Вывод:

'2000-01-01T12:00:00'
'2000-01-01T12:00:00'

Я подумал, что это может быть проблемой, связанной с отсутствием определения, если 12:00 - полночь или полдень, но даже при выполнении того же кода для других разных часов результат все тот же:

datetime.strptime('2000-01-01 06:00:00 AM', frmt).isoformat()
datetime.strptime('2000-01-01 06:00:00 PM', frmt).isoformat()

Вывод:

'2000-01-01T06:00:00'
'2000-01-01T06:00:00'

На сайте strftime.org написано, что используемый мной формат должен работать, но это не так. Что мне делать?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Вот почему я использую стрелку. Просто делает все это проще.

import arrow
frmt = 'YYYY-MM-DD HH:mm:ss A'
print(arrow.get('2000-01-01 12:00:00 AM', frmt))
print(arrow.get('2000-01-01 12:00:00 PM', frmt))
#datetime
print(arrow.get('2000-01-01 12:00:00 AM', frmt).datetime)
print(arrow.get('2000-01-01 12:00:00 PM', frmt).datetime)
#isoformat
print(arrow.get('2000-01-01 12:00:00 AM', frmt).isoformat())
print(arrow.get('2000-01-01 12:00:00 PM', frmt).isoformat())
1 голос
/ 31 мая 2019

Вы можете использовать dateutil.parser.parse для анализа любой строки даты и времени без предоставления строки формата, это доступно в модуле dateutil

In [22]: from dateutil import parser                                                                                                                                                   

In [25]: parser.parse('2000-01-01 12:00:00 PM').isoformat()                                                                                                                            
Out[25]: '2000-01-01T12:00:00'

In [26]: parser.parse('2000-01-01 12:00:00 AM').isoformat()                                                                                                                            
Out[26]: '2000-01-01T00:00:00'
...