django时区和postgres时区

1. 背景

公司有个任务,功能要求:限制用户24小时发送的任务数,同时要告诉用户什么时间可以重试。

但是............,发现几个问题:

  • django代码打印出来的timezone.now(),跟北京时间差8个小时
  • django的日志打印,最前边的部分,是跟北京时间一样的
  • postgres时区,跟北京时间差8个小时
python 复制代码
# 查看django的timezone的当前时间,时区
from django.utils import timezone
print(timezone.now())
# 输出 datetime.datetime(2024, 4, 30, 8, 45, 27, 427727, tzinfo=<UTC>)



# 查看系统的当前时间和时区,一般跟服务器一样
from datetime import datetime
from django.utils import timezone
print(datetime.now()) # 结果跟北京时间一样
timezone.make_aware(datetime.now())
# 输出 datetime.datetime(2024, 4, 30, 16, 47, 51, 43601, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)


# 查看postgres的时区
show timezone # 结果是ETC/UTC
select now() # 结果的时间,跟北京时间差8个小时

从结果来看,django的timezone=postgres的时区,但是和datetime.now()是不一样的。什么原因呢?先看原理

2. 需要明白的知识

django的timezone是根据settings的配置来显示的,需要两个参数来控制

python 复制代码
from django.utils import timezone
# 输出时区
print(timezone.get_current_timezone_name())
# 'Asia/Shanghai'
print(settings.USE_TZ) # True

datetime的时间是同步于系统的,而且django的日志模块Logging,就是跟datetime的时间是一样的。

postgres的时区是在postgres.conf里配置的,这个自己GPT

3. 最后解决方法

  1. django的timezone和数据库的timezone必须是一致的
  2. 在展示给用户重试的时间,在数据库中查找24小时内的比对任务数,然后取最早的时间,使用timezone.localtime(create_time)进行转换。
python 复制代码
timezone.localtime(create_time)

然后就解决了。

4. 最后

解决问题先救急后优化。一定不能慌,慢慢来,纠细节,别老用加8小时-24小时,这种太不确定了。思路捋不顺,多跟小鸭子讲讲。欢迎大家评论指正

相关推荐
傻啦嘿哟几秒前
Python实现Excel数据自动化处理:从繁琐操作到智能流程的蜕变
python·自动化·excel
Amelia1111111 分钟前
day39
python
叫我:松哥5 分钟前
基于django的新能源汽车租赁推荐分析系统,包括用户、商家、管理员三个角色,协同过滤+基于内容、用户画像的融合算法推荐
python·算法·机器学习·pycharm·django·汽车·echarts
艾莉丝努力练剑7 分钟前
艾莉丝努力练剑的2025年度总结
java·大数据·linux·开发语言·c++·人工智能·python
大叔_爱编程8 分钟前
基于深度神经网络的课程教学评价系统-django
django·毕业设计·tensorflow·源码·scikit-learn·课程设计·深度神经网络
K哥112510 分钟前
【Redis】缓存策略
数据库·redis·缓存
AC赳赳老秦1 小时前
DeepSeek教育科技应用:智能生成个性化学习规划与知识点拆解教程
前端·网络·数据库·人工智能·学习·matplotlib·deepseek
枫叶丹42 小时前
【Qt开发】Qt系统(一)-> 定时器 QTimerEvent 和 QTimer
c语言·开发语言·数据库·c++·qt·系统架构
计算机毕设VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue在线考试系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
2501_944452238 小时前
字数统计 Cordova 与 OpenHarmony 混合开发实战
python