gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:41:10 26 4
gpt4 key购买 nike

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

我有一个事件对象,它有 publish_startpublish_end 日期。

控制台输出示例;

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

我如何比较这个时间以找出哪些对象现在处于事件状态?

最佳答案

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

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() 时间戳中删除时区信息:

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

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

关于python - 如何在不更改值的情况下使时间对象 TZ 感知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com