Python如何将'07:37 am GMT+5.30 on 10/11/2011'转为datetime对象
错误原因
- 解析字符串需要调用datetime类的
strptime()方法,直接向datetime构造函数传入格式字符串不符合语法规范 - 替换
+5.30后的字符串仍保留GMT字段,但你编写的格式模板没有匹配该字段,导致格式匹配失败 - 输出用的
Print首字母大写,Python内置输出函数为小写的print - 配合
%p(上午/下午标识)使用的小时格式化符应为12小时制的%I,你用的%H是24小时制,会导致下午时间解析错误
解决方法1:移除时区信息后解析
如果你不需要保留原时区信息,可以按以下代码修改:
import datetime b = "07:37 am GMT+5.30 on 10/11/2011" a = b.replace("+5.30", "") # strptime第一个参数为待解析字符串,第二个为匹配模板 c = datetime.datetime.strptime(a, "%I:%M %p GMT on %d/%m/%Y") print(c)
运行输出结果为:2011-11-10 07:37:00
解决方法2:保留时区信息解析
如果需要保留GMT+5.30的时区偏移信息,不需要手动裁剪字符串,直接匹配时区字段即可:
import datetime b = "07:37 am GMT+5.30 on 10/11/2011" # 用%z匹配时区偏移字段 c = datetime.datetime.strptime(b, "%I:%M %p GMT%z on %d/%m/%Y") print(c) print("对应时区:", c.tzinfo)
运行输出结果为:
2011-11-10 07:37:00+05:30 对应时区: UTC+05:30
注意事项
部分中文系统环境下,Python的%p标识符默认只能识别大写的AM/PM,如果解析报错可以先将字符串里的am/pm转为大写再处理:
b = b.replace('am', 'AM').replace('pm', 'PM')
内容的提问来源于stack exchange,提问作者Ramachandran G
相关产品推荐
相关产品推荐

