如何在Django视图中将当前时间格式化为年-月-日格式
Django中将当前时间格式化为「年-月-日」的实现方法
你当前代码直接打印timezone.now()返回的是完整带时区的datetime对象的字符串表示,包含时分秒、微秒、时区偏移的冗余信息,只要对拿到的时间对象做格式化处理,就能输出你需要的纯「年-月-日」格式结果,可参考以下几种常用实现方式:
基础格式化写法
直接利用datetime对象自带的strftime方法,通过格式串匹配需要的输出结构:
from django.utils import timezone now = timezone.now() # %Y 对应四位年份,%m 对应两位月份,%d 对应当天日期 formatted_date = now.strftime("%Y-%m-%d") print('date :', formatted_date)
运行后即可输出date : 2020-12-31的预期结果。
适配本地时区的稳妥写法
你当前拿到的时间结果带+00:00标记,是UTC标准时间。如果你的项目配置了非UTC的本地时区(比如国内常用的Asia/Shanghai),直接格式化UTC时间可能会因为时区差导致日期出现偏差(跨零点时可能差1天)。这种情况可以先通过Django内置的localtime方法把时间转为项目配置的本地时区时间,再做格式化:
from django.utils import timezone # 转换为项目配置的本地时区时间 local_time = timezone.localtime(timezone.now()) formatted_date = local_time.strftime("%Y-%m-%d") print('date :', formatted_date)
用Django封装的格式化方法
Django自带了专门的日期格式化工具,和Python原生strftime逻辑一致,但会自动适配项目的全局语言、时区配置:
from django.utils import timezone from django.utils.formats import date_format now = timezone.now() # 'Y-m-d' 对应固定的年-月-日格式 formatted_date = date_format(now, 'Y-m-d') print('date :', formatted_date)
常见注意点
- 不要通过字符串切片的方式截取日期部分,碰到不同的时间格式变更很容易出现截取错误
- 如果格式化后的日期是用于传给前端模板渲染,不需要在视图里手动处理,模板里直接通过内置过滤器
{{ 时间对象|date:"Y-m-d" }}就能输出对应格式,减少重复逻辑
内容的提问来源于stack exchange,提问作者Ahmed Yasin
相关产品推荐
相关产品推荐

