相关疑难解决方法(0)

PYTZ'美国/埃德蒙顿'错误地抵消了

可能重复:
pytz的奇怪时区问题

这似乎是错的:

>>> import pytz
>>> z1 = timezone('America/Edmonton')
>>> z2 = timezone('US/Mountain')
>>> z1
<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>
>>> z2
<DstTzInfo 'US/Mountain' MST-1 day, 17:00:00 STD>
>>> pytz.VERSION
'2012f'
>>> 
Run Code Online (Sandbox Code Playgroud)

'America/Edmonton'和'US/Eastern'应该是同一时区(STD的17:00:00).更不用说16:26:00没有任何意义.

- 更新 -

以上是Jon Skeet的回答.但是,当我这样做时,事情变得奇怪:

>>> d = datetime.now()
>>> d
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706)
Run Code Online (Sandbox Code Playgroud)

我创造了一个天真的约会.由于'America/Edmonton' 我的时区,我尝试手动设置:

>>> d2 = d.replace(tzinfo=timezone('America/Edmonton'))
>>> d2
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706, tzinfo=<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>)
Run Code Online (Sandbox Code Playgroud)

这不应该有任何改变,因为这是正确的TZ.然而:

>>> d2.astimezone(timezone('US/Eastern'))
datetime.datetime(2012, 10, …
Run Code Online (Sandbox Code Playgroud)

python timezone pytz

6
推荐指数
1
解决办法
1193
查看次数

Django 立即测试模拟日期时间

我有一个 Django 测试,我需要模拟 datetime.now(),因为它测试的视图使用 datetime.now()

\n\n

我正在使用 Michael Foord 的模拟库,版本 1.0.1。
\n我正在寻找一种不使用其他库(例如 freezegun)的解决方案。

\n\n

大多数例子都是这样的,这个导入 datetime 并覆盖它,但我正在导入 datetime.datetime 并尝试覆盖它,由于某种原因,这不起作用。

\n\n

覆盖日期时间的工作原理:

\n\n
import mock\nimport datetime\n\nclass FixedDate(datetime.datetime):\n\n    @classmethod\n    def now(cls):\n        return cls(2010, 1, 1)\n\n@mock.patch(\'datetime.datetime\', FixedDate)\ndef myTest():\n    print(datetime.datetime.now())\n\nmyTest()\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我想导入 datetime.datetime 并执行以下操作:

\n\n
import mock\nfrom datetime import datetime\n\nclass FixedDate(datetime):\n\n    @classmethod\n    def now(cls):\n        return cls(2010, 1, 1)\n\n@mock.patch(\'datetime\', FixedDate)\ndef myTest():\n    print(datetime.now())\n\nmyTest()\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会导致 TypeError: Need a valid target to patch. 您提供了:“日期时间”。

\n\n

模拟库还指出:

\n\n
\n

target 应该是 \xe2\x80\x98package.module.ClassName\xe2\x80\x99 形式的字符串。目标被导入,指定的对象被新对象替换,因此目标必须可以从您调用补丁的环境中导入。

\n …

python django datetime unit-testing python-mock

3
推荐指数
1
解决办法
6286
查看次数

如何使用自创建以来的天数注释查询集

我正在尝试根据促销进行一些复杂的排序:自创建以来每 7 天促销一篇文章(文章在 30 天后过期)。

我的方法是用自创建以来的天数来注释查询集,但days_since_creation在我的代码中,注释字段 ( )的值始终为 0。

from datetime import timedelta
from django.test import TestCase
from django.db.models import ExpressionWrapper, F
from django.db.models.fields import IntegerField
from django.utils import timezone
from .models import Article
    # class Article(models.Model):
    #     title = models.CharField(max_length=150)
    #     creation_date = models.DateTimeField()
    # 
    #     def __str__(self):
    #         return self.title


class ArticleTestCase(TestCase):

    def test_days_since_creation(self):
        now = timezone.now()
        objects_data = [
            Article(
                title='Alrp',
                creation_date=(now - timedelta(days=5)) # 5 days ago
            ),
            Article(
                title='Bopp',
                creation_date=(now - timedelta(days=7)) # …
Run Code Online (Sandbox Code Playgroud)

django datetime annotate django-queryset

2
推荐指数
1
解决办法
1511
查看次数