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

时间:2018-02-05 16:24:51

标签: 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']))

Taskcreated_timestamp字段,auto_add_now设置为True,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

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

  

[*]回复时间戳:24-01-2018 10:57

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

2 个答案:

答案 0 :(得分:1)

事实证明,给予时区表达有助于:

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

答案 1 :(得分:0)

尝试为make_aware提供您想要的时区。

同时检查测试中的特定时间有点循环,可能不需要检查它,只是确保它运行并生成时间戳。