Files
HeurAMS-Classic/src/heurams/services/timer.py
T
2026-05-07 19:48:07 +08:00

66 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 时间服务
import datetime
import time
from heurams.context import config_var
from heurams.services.logger import get_logger
logger = get_logger(__name__)
def get_daystamp() -> int:
"""获取当前日戳(以天为单位的整数时间戳)"""
time_override = config_var.get()["services"]["timer"]["daystamp_override"]
if time_override != -1:
logger.debug("使用覆盖的日戳: %d", time_override)
return int(time_override)
result = int(
(time.time() + config_var.get()["services"]["timer"]["timezone_offset"])
// (24 * 3600)
)
logger.debug("计算日戳: %d", result)
return result
def get_timestamp() -> float:
"""获取 UNIX 时间戳"""
# 搞这个函数的原因是要支持可复现操作
time_override = config_var.get()["services"]["timer"]["timestamp_override"]
if time_override != -1:
logger.debug("使用覆盖的时间戳: %f", time_override)
return float(time_override)
result = time.time()
logger.debug("获取当前时间戳: %f", result)
return result
def get_timestamp_ms() -> int:
"""获取当前毫秒级 Unix 时间戳"""
return int(get_timestamp() * 1000)
def daystamp_to_datetime(daystamp: int) -> datetime.datetime:
"""将日戳转换为 UTC datetime (当日午夜)"""
return datetime.datetime(
1970, 1, 1, tzinfo=datetime.timezone.utc
) + datetime.timedelta(days=daystamp)
def datetime_to_daystamp(dt: datetime.datetime) -> int:
"""将 datetime 转换为日戳(从 1970-01-01 起的天数)
接受带时区或 naive 的 datetimenaive 视为 UTC)。
"""
epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc)
if dt.tzinfo is None:
dt = dt.replace(tzinfo=datetime.timezone.utc)
delta = dt - epoch
return delta.days
def get_now_datetime() -> datetime.datetime:
"""获取当前时间的 UTC datetime(遵守时间覆盖)"""
return datetime.datetime.fromtimestamp(get_timestamp(), tz=datetime.timezone.utc)