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

如何让Django网站正确显示访问用户所在地的本地时间?

Django项目时间显示8小时偏差修复方案

问题原因

  • Django默认时区配置为UTC,与东八区存在8小时时差,Python标准库time模块的localtime()默认读取的是服务器运行环境的时区时间,而非访问者的本地时间
  • 若仅修改服务器时区,只能适配单一地区用户,无法满足不同地区访问者的本地时间显示需求

修复方案

方案1:仅适配固定时区用户(例如所有用户均在国内,统一显示东八区时间)

  1. 修改项目settings.py配置:
# 替换默认UTC时区为上海时区
TIME_ZONE = 'Asia/Shanghai'
# 关闭时区自动转换,避免时间二次偏移
USE_TZ = False
  1. 优先使用Django自带的时区工具获取时间(更适配Django生态):
from django.utils import timezone
from django.template.defaultfilters import date as django_date

def time_display(request):
    now = timezone.now()
    context = {
        "date": django_date(now, "M d, Y"),
        "time1": django_date(now, "H:i A"),
        "time3": django_date(now, "H:i A"),
    }
    return render(request,'time_display.html',context)

修改完成后重启Django服务即可生效。

方案2:适配所有地区访问者,动态显示用户本地时间

后端无法直接获取访问者设备的时区信息,因此需要前端配合实现:

  1. 后端仅传递UTC标准时间给前端:
from django.utils import timezone

def time_display(request):
    context = {
        # 传递ISO格式的UTC时间
        "utc_now": timezone.now().isoformat()
    }
    return render(request,'time_display.html',context)
  1. 前端通过JavaScript将UTC时间转换为用户本地时间并渲染:
<!-- 页面中预留显示位置 -->
<div>日期:<span id="date"></span></div>
<div>时间:<span id="time1"></span></div>

<script>
const utcTime = new Date("{{ utc_now }}");
// 格式化日期
document.getElementById('date').textContent = utcTime.toLocaleDateString('zh-CN', {
    year: 'numeric',
    month: 'short',
    day: '2-digit'
});
// 格式化12小时制时间
document.getElementById('time1').textContent = utcTime.toLocaleTimeString('zh-CN', {
    hour: '2-digit',
    minute: '2-digit',
    hour12: true
});
</script>

该方案可自动适配任意时区的访问者,显示对应本地时间。

内容的提问来源于stack exchange,提问作者Michael S DuWors

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:57:02