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

2024-09-27 21:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要转换一个格式化为'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()

输出为:

^{pr2}$

我认为如果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网站说我使用的格式应该有效,但实际上不行。我该怎么办?在


Tags: 字符串代码fromimport示例datetime定义时间
2条回答

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

这就是我用箭的原因。只是让这一切变得简单。在

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

相关问题 更多 >

    热门问题