from datetime import datetime, timedelta, timezone import time ''' 2025-02-09T15:45:00+00:00 采用的是 ISO 8601 国际标准日期时间格式,具体特点如下: 日期部分:YYYY-MM-DD(年-月-日),例如2025-02-09表示2025年2月9日。 时间部分:HH:mm:ss(时:分:秒),例如15:45:00表示下午3点45分0秒。 分隔符:日期与时间之间用字母T连接,表明这是一个完整的时间点。 时区偏移:末尾的+00:00表示该时间基于协调世界时(UTC),即零时区。若使用Z替代+00:00(如2025-02-09T15:45:00Z),也符合ISO 8601标准,两者等价 北京时间格式 2025-02-09T15:45:00+08:00 ''' def to_utc_time(query_time: str): ''' 将一个北京时间的时间点,转换成utc ''' beijing_time = datetime.fromisoformat(query_time) utc_time = beijing_time.astimezone(timezone.utc) return utc_time def to_utc_time_range(query_time: str, delta: float): ''' 将一个北京时间的时间点,转换成utc的 start/end 时间段 有些查询按照一个时间点查不到,用时间段保证能成功 delta 单位是秒 ''' beijing_time = datetime.fromisoformat(query_time) utc_time = beijing_time.astimezone(timezone.utc) utc_start_time = utc_time - timedelta(seconds=delta) utc_end_time = utc_time + timedelta(seconds=delta) return (utc_start_time, utc_end_time) def get_utc_beginning(utc_time: datetime): ''' 获取 utc 时间的当天零点 ''' return utc_time.replace(hour=0, minute=0, second=0, microsecond=0) def get_utc_after(utc_time: datetime, hours: float, seconds: float): ''' 获取 utc 时间后面的一个时间点 ''' return utc_time + timedelta(hours=hours, seconds=delta)