当冻结时间到datetime.datetime.now()时,Python Freezegun给出不同的值

时间:2015-07-08 15:13:33

标签: python datetime freezegun

我试图使用freezegun将时钟设置为10秒进行单元测试。

我发现用freezegun设置现在的时间会导致datetime.datetime.now()的预期行为,但time.time()的行为有些不同,因为“冻结”时间大约是30,000秒(8小时)。

使用datetime.datetime.utcnow(),关闭3600秒(1小时)。

我需要做些什么来适当地模拟time.time()使用的时间?

立即使用():关闭8小时

def test_freezegun(self):
  """ Test that freezegun can set time.time() back 10 seconds. """

  with freezegun.freeze_time(datetime.datetime.now()):
    print time.time()
    print datetime.datetime.now()

  print time.time()
  print datetime.datetime.now()

# Output
[08:09:32] 1436339372
[08:09:32] 2015-07-08 08:09:32.119516
[08:09:32] 1436368172
[08:09:32] 2015-07-08 08:09:32.175031

使用utcnow():关闭1小时

def test_freezegun(self):
  """ Test that freezegun can set time.time() back 10 seconds. """

  with freezegun.freeze_time(datetime.datetime.utcnow()):
    print time.time()
    print datetime.datetime.now()

  print time.time()
  print datetime.datetime.now()

# Output
[08:08:56] 1436364536
[08:08:56] 2015-07-08 15:08:56.589202
[08:08:56] 1436368136
[08:08:56] 2015-07-08 08:08:56.655346

更新

这有效,但我想了解原因:

使用utcnow()+ 1小时:相同的time.time()输出,如预期的那样

def test_freezegun(self):
  """ Test that freezegun can set time.time() back 10 seconds. """

  with freezegun.freeze_time(datetime.datetime.utcnow() + datetime.timedelta(hours=1)):
    print time.time()
    print datetime.datetime.now()

  print time.time()
  print datetime.datetime.now()

#Output
[08:22:27] 1436368947
[08:22:27] 2015-07-08 16:22:27.268315
[08:22:27] 1436368947
[08:22:27] 2015-07-08 08:22:27.339116

0 个答案:

没有答案