Django模拟时区感知日期时间创建模型

gon*_*zor 0 python django datetime

我有一个测试,我创建了几个对象:

def test_get_courier_task_returns_couriers_tasks(self):
    with patch('django.utils.timezone.now', return_value=make_aware(datetime(2018, 1, 24, 11, 57))):
        task1 = TaskFactory()

        response = json.loads(MyAPI.get_tasks_list(self.user.username))
        print('[*] Response timestamp: {}'.format(response['content'][0]['timestamp']))
Run Code Online (Sandbox Code Playgroud)

设置为 True的Taskhascreated_timestamp字段auto_add_now和上面to_json()使用的方法get_tasks_list()

class Task(models.Model):
    created_timestamp = models.DateTimeField(auto_now_add=True)

    def to_json(self):
        to_return = {
            'timestamp': self.created_timestamp.strftime('%d-%m-%Y %H:%M')
        }
        return to_return
Run Code Online (Sandbox Code Playgroud)

不幸的是,测试给出了这个输出:

[*] 响应时间戳:24-01-2018 10:57

我已经检查过这是时区感知,但不是给我 UTC+1,而是在保存时给我 UTC+0。我需要做什么?我USE_TZ = True在我的设置中已经应用了迁移。这个问题对我的问题没有帮助。

gon*_*zor 6

事实证明,明确指定时区有助于:

with patch('django.utils.timezone.now', return_value=datetime(2018, 1, 24, 11, tzinfo=pytz.timezone('utc'))):
Run Code Online (Sandbox Code Playgroud)