django时区和postgres时区

1. 背景

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

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

  • django代码打印出来的timezone.now(),跟北京时间差8个小时
  • django的日志打印,最前边的部分,是跟北京时间一样的
  • postgres时区,跟北京时间差8个小时
# 查看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的配置来显示的,需要两个参数来控制

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)进行转换。
  3. timezone.localtime(create_time)

    然后就解决了。

4. 最后

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

相关推荐

  1. Ubuntu设置时间同步

    2024-05-01 06:40:05       53 阅读
  2. Oracle中怎么设置系统时间

    2024-05-01 06:40:05       50 阅读
  3. postgres

    2024-05-01 06:40:05       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 06:40:05       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 06:40:05       97 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 06:40:05       78 阅读
  4. Python语言-面向对象

    2024-05-01 06:40:05       88 阅读

热门阅读

  1. 云计算知识点-03

    2024-05-01 06:40:05       31 阅读
  2. 将SSH密钥添加到GitHub账户

    2024-05-01 06:40:05       24 阅读
  3. -CS3342

    2024-05-01 06:40:05       36 阅读
  4. Spring Boot使用Logback将某些日志输出到单独的文件

    2024-05-01 06:40:05       34 阅读
  5. Kappa系数-评估分类算法的表现

    2024-05-01 06:40:05       27 阅读
  6. Spring boot 应用引入 Spring cloud alibaba nacos

    2024-05-01 06:40:05       33 阅读
  7. NLP Step by Step -- 如何微调一个模型(1)

    2024-05-01 06:40:05       31 阅读
  8. NLP中常见的tokenize方式及token类型

    2024-05-01 06:40:05       29 阅读
  9. spring源码分析之上下文构建

    2024-05-01 06:40:05       29 阅读
  10. 2024年华东杯数学建模思路+论文+代码

    2024-05-01 06:40:05       38 阅读
  11. 自然语言处理(NLP)简介

    2024-05-01 06:40:05       30 阅读
  12. np.concatenate在图像处理中的使用

    2024-05-01 06:40:05       28 阅读
  13. 图像处理:时域、空域、频率的滤波介绍

    2024-05-01 06:40:05       29 阅读
  14. 10种新兴网络安全威胁和攻击手法

    2024-05-01 06:40:05       35 阅读
  15. 【无标题】

    2024-05-01 06:40:05       27 阅读
  16. 第19天 IO流

    2024-05-01 06:40:05       29 阅读