如何使时间对象TZ感知而不改变值?

2024-09-28 21:46:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个django项目,我对时区有点困惑。在

我有一个campaing对象,它有publish_start和{}日期。在

控制台输出示例

campaingObject.publish_start
datetime.datetime(2015, 9, 1, 0, 0)

campaingObject.publish_end
datetime.datetime(2015, 9, 28, 10, 10)

我想得到现在激活的露营对象。这意味着发布开始时间小于当前时间,结束时间大于当前时间。在

当我打电话给:

^{pr2}$

这个结果不在我的时区。我可以通过

datetime.now(pytz.timezone('Europe/Istanbul'))

但这一次我无法比较值来确定当前哪些对象处于活动状态。在

datetime.now(pytz.timezone('Europe/Istanbul')) > campaingObject.publish_end
TypeError: can't compare offset-naive and offset-aware datetimes

如何比较这些时间以找出当前哪些对象处于活动状态?在


Tags: 项目对象djangodatetime时间publishstartnow
2条回答
   datetime.now(pytz.timezone('Europe/Istanbul')) > campaingObject.publish_end
   TypeError: can't compare offset-naive and offset-aware datetimes

How can i compare this times to find which objects are active right now?

在任何地方使用时区感知的日期时间对象。如果^{},那么django在内部使用时区感知的datetime对象。特别是,^{}返回一个有意识的日期时间对象。在

^{}返回current time zoneyou don't need to call ^{} explicitly中的当前时间当前时区用于自动呈现。如果默认时区^{}不适合请求,则可以使用^{}更改当前时区。在

How to make a time object TZ aware without changing the value?

如果您已经配置了USE_TZ=True;您不应该看到天真的datetime对象。要将current time zone附加到一个朴素的datetime对象,请调用^{}。在

通常,您可以直接调用pytz_timezone.localize()方法:

#!/usr/bin/env python
from datetime import datetime
import pytz

tz = pytz.timezone('Europe/Istanbul')
now = datetime.now(tz) # get the current time
then = tz.localize(datetime.strptime('2015-09-15 17:05', '%Y-%m-%d %H:%M'),
                   is_dst=None)

这是more details about what is ^{} flag and why do you need it, see "Can I just always set is_dst=True?" section。在

您可以使用django中的make_aware函数来处理原始的datetime对象。然后必须指定原始时间戳的时区。在

now_ts = datetime.now(pytz.timezone('Europe/Istanbul'))
now_ts > make_aware(campaingObject.publish_end, pytz.timezone('Europe/Istanbul'))

https://docs.djangoproject.com/en/1.8/ref/utils/#django.utils.timezone.make_aware

另一方面,还可以使用make_naive函数从now()时间戳中删除时区信息:

^{pr2}$

https://docs.djangoproject.com/en/1.8/ref/utils/#django.utils.timezone.make_naive

相关问题 更多 >