我有一个任务来实现提升(从某个日期开始的时间加速),例如,我们有今天的日期,有一个主动提升,5 秒后,当检查已经过去了多少时间时,我们应该得到不是 5秒但 10 秒(时间加速了 2 倍)。但同时,当已经激活的加速消失时,不要失去旧的加速,也就是说,时间必须照常计算,但要加上旧的加速。如何实施?示例设计如下:
import datetime
import time
cases = (2, 0, 1, 1, 1, 2)
intervals = (
(31536000, 'год', 'года', 'лет'),
(2592000, 'месяц', 'месяца', 'месяцев'),
(86400, 'день', 'дня', 'дней'), # 60 * 60 * 24
(3600, 'час', 'часа', 'часов'), # 60 * 60
(60, 'минуту', 'минуты', 'минут'),
(1, 'секунду', 'секунды', 'секунд'),)
def plural_form(n: int, v: (list, tuple)):
"""Функция возвращает число и просклонённое слово после него
Аргументы:
:param n: число
:param v: варианты слова в формате (для 1, для 2, для 5)
Пример:
plural_form(difference.days, ("день", "дня", "дней"))
:return: Число и просклонённое слово после него
"""
return "{:,}".format(n).replace(",", ".") + f" {v[2 if (4 < n % 100 < 20) else cases[min(n % 10, 5)]]}"
def show_time(seconds, granularity=5):
"""Функция возвращает цифровое время с использованием utctimestamp
granularity - длинна возвращаемого значения.
"""
result = []
seconds = int(seconds)
for count, *name in intervals:
value = seconds // count
if value:
seconds -= value * count
result.append(plural_form(value, name))
return '. '.join(result[:granularity]) if result else '0 сек'
boost = False
#Время начала события
start_date = datetime.datetime.now()
#Слипаем что бы прошло какое-то время
time.sleep(5)
#Проверяем сколько прошло времени.
time_passed = (datetime.datetime.now() - start_date).total_seconds()
print(start_date)
print(show_time(time_passed))
需要存储三个值:
根据这些数据,您可以计算当前时间,同时考虑到升压:
像这样使用:
这将显示: