Django、日期时间和时区

4 投票
3 回答
4536 浏览
提问于 2025-04-15 16:21

我正在使用 datetime.now() 来获取当前时间,这个功能是在一个活动应用中实现的,用户可以创建一个有结束日期的活动,然后所有活动会显示在日历上。如果某个活动已经过期,它会以红色显示。

我遇到的问题是,有些用户在不同的时区,他们说活动的结束时间不对。活动应该在到期那天的午夜结束。

我在我的 Django 设置文件 settings.py 中设置了时区。当我使用 datetime.now() 时,它是根据用户的本地时区来计算的,还是根据我在 Django 中设置的时区来计算的呢?

我想要的是找到用户当前时区的午夜时间,所以如果我上面的方法不对,我该怎么做呢?

谢谢

3 个回答

0

我开发了一个库,可以让你在处理用户的时区时更加方便。你只需要使用一个字段和一些时区工具,每次进行请求或查询时,所有的时间都会自动转换为用户所在的时区。

这个库叫做 django-timezones,它是对 Brosner 最初创建的库 的修改版。

你可以试试看,看看它是否适合你。

0

试着存储UTC时间(协调世界时间),然后根据用户所在的时区进行必要的调整:

import datetime

def getUtcNow():
    return datetime.datetime(*time.gmtime()[:6])
4

你需要让用户在他们的个人资料中指定他们的时区。这样就可以正确计算当地时间了。

可以看看这个链接 时间的相对性 - Python datetime 的不足和解决方法,里面有一些很好的信息和具体的例子。

更新: 从 Django 1.4 开始,它支持 时区。可以去了解一下。

撰写回答