如何在 django 中获取时区感知日期?

Posted

技术标签:

【中文标题】如何在 django 中获取时区感知日期?【英文标题】:How can I get the timezone aware date in django? 【发布时间】:2015-02-06 18:07:33 【问题描述】:

我在 python django 中使用 delorean 进行日期时间计算。

http://delorean.readthedocs.org/en/latest/quickstart.html

这是我正在使用的:

now = Delorean(timezone=settings.TIME_ZONE).datetime
todayDate = now.date()

但我收到此警告:

RuntimeWarning: DateTimeField start_time received a naive datetime (2014-12-09 00:00:00) while time zone support is active.

我想知道如何让它知道。

我也试过了:

todayDate = timezone.make_aware(now.date(), timezone=settings.TIME_ZONE)

然后我明白了:

AttributeError: 'datetime.date' object has no attribute 'tzinfo'

【问题讨论】:

不确定它在Delorean 中是如何工作的,但日期时间可以是时区感知的,因为日期的概念不太有意义。 docs.djangoproject.com/en/dev/topics/i18n/timezones 【参考方案1】:

目前尚不清楚您是要以 date 对象还是 datetime 对象结束,因为 Python 没有“时区感知日期”的概念。

要获取与当前时区中的当前时间对应的date 对象,您可以使用:

# All versions of Django
from django.utils.timezone import localtime, now
localtime(now()).date()

# Django 1.11 and higher
from django.utils.timezone import localdate
localdate()

也就是说:您将获得 UTC 格式的当前时区感知 datetime;您正在将其转换为本地时区(即TIME_ZONE);然后从中获取日期。

如果你想获得一个datetime 对应于当前时区当前日期的 00:00:00 的对象,你可以使用:

# All versions of Django
localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0)

# Django 1.11 and higher
localtime().replace(hour=0, minute=0, second=0, microsecond=0)

基于此和your other question,我认为您对 Delorean 软件包感到困惑。我建议坚持使用 Django 和 Python 的日期时间功能。

【讨论】:

以上是关于如何在 django 中获取时区感知日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用时区感知日期过滤模型?

如何在 Python 中结合时区感知日期和时间?

如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?

如何在 Django 1.4 中存储一个简单的日期时间

如何在熊猫中使用 read_csv 将时区感知日期时间作为时区天真的本地 DatetimeIndex 读取?

在 Python 中获取随机时区感知日期时间