Python中如何将Zendesk API返回的字符串日期转为可格式化对象?
解决Zendesk日期字符串转Python datetime对象的问题
嘿,这个问题我对接Zendesk API的时候也踩过同款坑!你碰到的AttributeError原因其实很直白:strptime()是Python datetime类的类方法,不是字符串对象自带的方法,直接在字符串上调用肯定会报错。
下面给你两种靠谱的解决方法,都能把Zendesk返回的ISO格式字符串转成可操作的datetime对象:
方法1:用datetime.strptime()指定格式
这是通用度最高的方法,不管Python版本都能用,只需要把字符串和对应的格式串传给datetime.strptime()就行:
from datetime import datetime # 从Zendesk拿到的日期字符串 zendesk_date = "2018-04-21T21:41:09Z" # 调用datetime类的strptime方法,传入字符串和格式模板 date_obj = datetime.strptime(zendesk_date, "%Y-%m-%dT%H:%M:%SZ") # 现在date_obj是datetime对象,就可以用strftime随意格式化了 print(date_obj.strftime("%Y/%m/%d %H:%M:%S")) # 输出:2018/04/21 21:41:09
格式串里的%Y代表4位年份,%m是两位月份,%d是两位日期,%H是24小时制小时,%M是分钟,%S是秒,最后Z直接匹配字符串里的时区标识。
方法2:用fromisoformat()快速转换(Python 3.7+)
因为Zendesk返回的是标准ISO 8601格式,Python 3.7及以上版本提供了更简洁的fromisoformat()方法,不过需要先把末尾的Z替换成+00:00(fromisoformat默认不直接识别Z):
from datetime import datetime zendesk_date = "2018-04-21T21:41:09Z" # 替换Z为UTC时区标识,再调用fromisoformat date_obj = datetime.fromisoformat(zendesk_date.replace("Z", "+00:00")) # 同样可以格式化输出 print(date_obj.strftime("%d-%b-%Y %I:%M %p")) # 输出:21-Apr-2018 09:41 PM
额外提示:如果需要处理时区
如果你的业务需要带时区的datetime对象,可以在转换后加上UTC时区信息:
from datetime import datetime, timezone date_obj = datetime.strptime(zendesk_date, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc) # 之后可以方便地转换到其他时区,比如东八区 cn_date = date_obj.astimezone(timezone(offset=datetime.timedelta(hours=8)))
内容的提问来源于stack exchange,提问作者TheFoolinRed
相关产品推荐
相关产品推荐

