如何使用 %p 将包含 AM/PM 的字符串转换为 python 中的日期时间
How to convert string containing AM/PM to datetime in python using %p
我需要转换一个格式为 '2000-01-01 12:00:00 AM'
的字符串,但不管是上午还是下午,结果都是一样的(见下面的例子)。
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'
我认为如果 12AM 是午夜或中午,这可能是一个与没有定义相关的问题,但即使在其他不同时间执行相同的代码,结果仍然相同:
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 网站说我使用的格式应该有效,但实际上无效。我该怎么办?
你可以使用dateutil.parser.parse to parse any datetime string without providing a format string, this is available in the 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())
我需要转换一个格式为 '2000-01-01 12:00:00 AM'
的字符串,但不管是上午还是下午,结果都是一样的(见下面的例子)。
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'
我认为如果 12AM 是午夜或中午,这可能是一个与没有定义相关的问题,但即使在其他不同时间执行相同的代码,结果仍然相同:
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 网站说我使用的格式应该有效,但实际上无效。我该怎么办?
你可以使用dateutil.parser.parse to parse any datetime string without providing a format string, this is available in the 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())