如何使用%p在python中将包含AM / PM的字符串转换为datetime

时间:2019-05-31 17:53:15

标签: python datetime strptime strftime

我需要转换一个格式为'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点是午夜或中午,这可能是一个没有定义的问题,但是即使在其他不同时间执行相同代码的结果仍然相同:

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 个答案:

答案 0 :(得分:1)

您可以使用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'

答案 1 :(得分:1)

这就是为什么我使用箭头。只是使所有这些变得容易。

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())