如何在Python中设置或冻结时间?

问题描述 投票:0回答:2

我想使用 python 设置一个与我系统上本地看到的不同的固定时间,这样当我使用 datetime.date.today() 时我就可以看到所需的日期

python python-3.x mocking python-datetime
2个回答
15
投票

添加参数 tz_offset。请参阅文档 https://pypi.org/project/freezegun/

from freezegun import freeze_time

@freeze_time("2012-01-14 03:21:34", tz_offset=-4)
def test():
    assert datetime.datetime.utcnow() == datetime.datetime(2012, 1, 14, 3, 21, 34)

有时断言会因时区而失败,因此添加带有常量时区的参数 tz_offset 可以修复该问题。 不修复测试中的时区可能会导致不稳定的测试,因为有时测试会通过,但在短时间内测试会失败。


-1
投票

您可以将 pytz 包与日期时间一起使用, 并立即指定日期时间。

from datetime import datetime
import pytz

# add wanted timezone instead of America/New_York
timeZone_AN = pytz.timezone('America/New_York') 
dt_Ny = datetime.now(timeZone_AN)
print("Datetime: ", dt_Ny)

根据 MrFuppes 评论进行更新,因为 pytz 将被弃用,您可以使用 zoneinfo。 看起来它会比 pytz 更有用。

from zoneinfo import ZoneInfo
timeZone_AN=("America/New_York")
更新

如果您想获得固定的日期时间,那么这会对您有所帮助。

# set your date as year, month, day
desiredTime_ymd = datetime.date(2020, 9,14) 

#print to test 
print(desiredTime_ymd)

#set sec, min, hour
desiredTime_smh=time(14, 42, 59)


#print to test 
print(desiredTime_smh)

#set all at once
#datetime(year, month, day, hour, minute, second, microsecond)
desredTime_all = datetime(2020, 9,14, 14, 42, 59)

#print to test 
print(desiredTime_all)


© www.soinside.com 2019 - 2024. All rights reserved.