我需要转换一个格式为'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网站说我使用的格式应该可以,但是不能。我该怎么办?
答案 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())