From cd35519e62de78ca99a0dc1ef7ba859a42f9fad0 Mon Sep 17 00:00:00 2001 From: DingZQ Date: Sun, 2 Mar 2025 17:16:00 +0800 Subject: [PATCH] Add more time api --- time_api.py | 72 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/time_api.py b/time_api.py index f3ef755..5a76d3d 100644 --- a/time_api.py +++ b/time_api.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta, timezone, date import time ''' @@ -14,7 +14,7 @@ import time ''' -def to_utc_time(query_time: str): +def parse_utc_time(query_time: str) -> datetime.datetime: ''' 将一个北京时间的时间点,转换成utc ''' @@ -22,29 +22,69 @@ def to_utc_time(query_time: str): utc_time = beijing_time.astimezone(timezone.utc) return utc_time -def to_utc_time_range(query_time: str, delta: float): +def parse_beijing_time(query_time: str) -> datetime.datetime: ''' - 将一个北京时间的时间点,转换成utc的 start/end 时间段 + 将一个 utc 的时间点,转换成北京时间 + ''' + utc_time = datetime.fromisoformat(query_time) + beijing_time = utc_time.astimezone(timezone(timedelta(hours=8))) + return beijing_time + +def to_utc_time(dt: datetime.datetime) -> datetime.datetime: + ''' + 将一个北京时间的时间点,转换成utc + ''' + utc_time = dt.astimezone(timezone.utc) + return utc_time + +def to_beijing_time(dt: datetime.datetime) -> datetime.datetime: + ''' + 将一个 utc 的时间点,转换成北京时间 + ''' + beijing_time = dt.astimezone(timezone(timedelta(hours=8))) + return beijing_time + +def parse_date(query_time: str) -> datetime.date: + ''' + 将一个日期字符串,转换成日期 + 日期字符串格式:YYYY-MM-DD + ''' + return datetime.fromisoformat(query_time).date() + + +def to_time_range(dt: datetime, delta: float) -> tuple[datetime.datetime, datetime.datetime]: + ''' + 将一个时间点,转换成 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) + start_time = dt - timedelta(seconds=delta) + end_time = dt + timedelta(seconds=delta) - return (utc_start_time, utc_end_time) + return (start_time, end_time) -def get_utc_beginning(utc_time: datetime): +def parse_date_range(query_time: str) -> tuple[datetime.datetime, datetime.datetime]: ''' - 获取 utc 时间的当天零点 + 将一个日期字符串,转换成 start/end 时间段 + 日期字符串格式:YYYY-MM-DD ''' - return utc_time.replace(hour=0, minute=0, second=0, microsecond=0) + start_time = datetime.fromisoformat(query_time).date() + end_time = start_time + timedelta(days=1) + return (start_time, end_time) -def get_utc_after(utc_time: datetime, hours: float=0.0, seconds: float=0.0): + +def get_day_start(dt: datetime.date) -> datetime.datetime: ''' - 获取 utc 时间后面的一个时间点 + 获取 某一天的 00:00:00 + 这一天可以是北京时间,也可以是 utc 时间 ''' - return utc_time + timedelta(hours=hours, seconds=seconds) + return dt.replace(hour=0, minute=0, second=0, microsecond=0) + +def get_day_end(dt: datetime.date) -> datetime.datetime: + ''' + 获取 某一天的 23:59:59 + 这一天可以是北京时间,也可以是 utc 时间 + ''' + return dt.replace(hour=23, minute=59, second=59, microsecond=0) +