如何将 12 小时制字符串转换为 24 小时制日期时间?
How to convert 12 hour string into 24 hour datetime?
我见过使用 datetime.strptime
格式 '%I:%M%p'
(例如 here)转换类似 '7:30 PM'
的解决方案,但我的字符串如下所示:
'05:15:00.000000000 AM'
同时有秒和AM/PM的事实似乎并不常见。
如何转换?
您可以使用 dateutil
包中的 parser
将字符串转换为日期时间对象,然后使用日期时间对象从中获取字符串。
from dateutil import parser
from datetime import datetime
dt = parser.parse("'24/NOV/18 05:15:00.000000000 AM'")
print(dt)
datetime_object = datetime.strftime(dt, '%b %d %Y %I:%M%p')
print(datetime_object)
输出:
2018-11-24 05:15:00 # parser output
Nov 24 2018 05:15AM # strftime output
您的格式的主要问题是 Python 不支持比微秒更精细的任何内容,如 here 所述。事实上,假设你有 000 作为最后三位小数秒,你可以使用下面的格式。
from datetime import datetime
datetime_object = datetime.strptime('24/NOV/18 05:15:00.000000000 AM', '%d/%b/%y %I:%M:%S.%f000 %p')
如果您不能做出这样的假设,这个肮脏的 hack 应该可以工作:
from datetime import datetime
s = '24/NOV/18 05:15:00.000000000 AM'
s = s[:-9] + s[-6:]
datetime_object = datetime.strptime(s, '%d/%b/%y %I:%M:%S.%f %p')
我见过使用 datetime.strptime
格式 '%I:%M%p'
(例如 here)转换类似 '7:30 PM'
的解决方案,但我的字符串如下所示:
'05:15:00.000000000 AM'
同时有秒和AM/PM的事实似乎并不常见。
如何转换?
您可以使用 dateutil
包中的 parser
将字符串转换为日期时间对象,然后使用日期时间对象从中获取字符串。
from dateutil import parser
from datetime import datetime
dt = parser.parse("'24/NOV/18 05:15:00.000000000 AM'")
print(dt)
datetime_object = datetime.strftime(dt, '%b %d %Y %I:%M%p')
print(datetime_object)
输出:
2018-11-24 05:15:00 # parser output
Nov 24 2018 05:15AM # strftime output
您的格式的主要问题是 Python 不支持比微秒更精细的任何内容,如 here 所述。事实上,假设你有 000 作为最后三位小数秒,你可以使用下面的格式。
from datetime import datetime
datetime_object = datetime.strptime('24/NOV/18 05:15:00.000000000 AM', '%d/%b/%y %I:%M:%S.%f000 %p')
如果您不能做出这样的假设,这个肮脏的 hack 应该可以工作:
from datetime import datetime
s = '24/NOV/18 05:15:00.000000000 AM'
s = s[:-9] + s[-6:]
datetime_object = datetime.strptime(s, '%d/%b/%y %I:%M:%S.%f %p')