Python 如何在不更改值的情况下感知时间对象TZ?

Python 如何在不更改值的情况下感知时间对象TZ?,python,django,pytz,Python,Django,Pytz,我正在做一个django项目,我对时区感到困惑 我有一个campaing对象,它有发布开始和发布结束日期 来自控制台的示例输出 campaingObject.publish_start datetime.datetime(2015, 9, 1, 0, 0) campaingObject.publish_end datetime.datetime(2015, 9, 28, 10, 10) 我想获取当前处于活动状态的露营对象。这意味着发布开始时间小于当前时间,结束时间大于当前时间 当我打电话时:

我正在做一个django项目,我对时区感到困惑

我有一个campaing对象,它有发布开始和发布结束日期

来自控制台的示例输出

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

campaingObject.publish_end
datetime.datetime(2015, 9, 28, 10, 10)
我想获取当前处于活动状态的露营对象。这意味着发布开始时间小于当前时间,结束时间大于当前时间

当我打电话时:

datetime.now()
datetime.datetime(2015, 9, 28, 5, 42, 37, 448415)
这个结果不在我的时区内。我可以用它来获取我自己的时间信息

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
如何比较这些时间以确定哪些对象当前处于活动状态?

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

now_ts = datetime.now(pytz.timezone('Europe/Istanbul'))
now_ts > make_aware(campaingObject.publish_end, pytz.timezone('Europe/Istanbul'))
另一方面,您还可以使用make_naive函数从现在的时间戳中删除时区信息:

now_ts = datetime.now(pytz.timezone('Europe/Istanbul'))
now_naive = make_naive(now_ts, pytz.timezone('Europe/Istanbul'))
now_naive > campaingObject.publish_end
如何比较此时间以确定哪些对象当前处于活动状态

在任何地方使用时区感知的datetime对象。If-then django在内部使用时区感知的datetime对象。特别是,返回一个可感知的datetime对象

返回中的当前时间--当前时区用于自动渲染。如果默认时区不适合请求,可以使用更改当前时区

如何在不更改值的情况下感知时间对象TZ

如果已配置,请使用_TZ=True;您不应该看到幼稚的datetime对象。要将附加到原始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)
给你

#!/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)