You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:02