如何在Python/Django中转换带时区的datetime为常规格式?
解决Django中带时区Datetime转无时区字符串的问题
嗨,我刚好碰到过一模一样的场景,给你几个简单好用的方案:
方法1:直接用Python原生strftime格式化
你的需求本质就是提取datetime的日期和时间部分,忽略时区后缀。带时区的aware datetime对象可以直接用strftime指定格式,完全不需要额外处理时区:
# 先获取目标Device实例 device = Device.objects.get(...) formatted_time = device.last_notification_time.strftime('%Y-%m-%d %H:%M:%S')
执行后直接就能得到2018-05-18 08:38:58这种格式的字符串。
方法2:用Django官方推荐的dateformat模块
如果想贴合Django的生态最佳实践,可以用它自带的日期格式化工具,和模板里的日期过滤器语法一致,后续调整格式也更方便:
from django.utils.dateformat import format device = Device.objects.get(...) formatted_time = format(device.last_notification_time, 'Y-m-d H:i:s')
额外注意点
- 如果
last_notification_time可能为None(比如设备还没发送过任何通知),记得先做非空判断,避免抛出AttributeError:device = Device.objects.get(...) if device.last_notification_time: formatted_time = device.last_notification_time.strftime('%Y-%m-%d %H:%M:%S') else: formatted_time = "未记录通知时间" # 自定义默认值即可 - 你之前用
strptime出问题,是因为这个方法是把字符串解析成datetime对象的,而你现在需要的是把datetime对象转成字符串,搞反方向啦,换成strftime就没问题了。
内容的提问来源于stack exchange,提问作者Kuldeep Raj
相关产品推荐
相关产品推荐

