Add more time api

This commit is contained in:
DingZQ
2025-03-02 17:16:00 +08:00
parent eb801660c8
commit cd35519e62

View File

@@ -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)
start_time = dt - timedelta(seconds=delta)
end_time = dt + timedelta(seconds=delta)
utc_start_time = utc_time - timedelta(seconds=delta)
utc_end_time = utc_time + timedelta(seconds=delta)
return (start_time, end_time)
return (utc_start_time, utc_end_time)
def parse_date_range(query_time: str) -> tuple[datetime.datetime, datetime.datetime]:
'''
将一个日期字符串,转换成 start/end 时间段
日期字符串格式YYYY-MM-DD
'''
start_time = datetime.fromisoformat(query_time).date()
end_time = start_time + timedelta(days=1)
return (start_time, 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=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)