diff --git a/timescaledb/router.py b/timescaledb/router.py index ac2fe9c..680789d 100644 --- a/timescaledb/router.py +++ b/timescaledb/router.py @@ -281,5 +281,7 @@ async def delete_scada_data( end_time: datetime, conn: AsyncConnection = Depends(get_database_connection), ): - await ScadaRepository.delete_scada_by_id_time(conn, device_id, start_time, end_time) + await ScadaRepository.delete_scada_by_id_time_range( + conn, device_id, start_time, end_time + ) return {"message": "Deleted successfully"} diff --git a/timescaledb/schemas/realtime.py b/timescaledb/schemas/realtime.py index dc8997a..91bf09f 100644 --- a/timescaledb/schemas/realtime.py +++ b/timescaledb/schemas/realtime.py @@ -1,7 +1,10 @@ from typing import List, Any, Dict -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from psycopg import AsyncConnection, sql +# 定义UTC+8时区 +UTC_8 = timezone(timedelta(hours=8)) + class RealtimeRepository: @@ -287,11 +290,22 @@ class RealtimeRepository: """ # Convert result_start_time string to datetime if needed if isinstance(result_start_time, str): - simulation_time = datetime.fromisoformat( - result_start_time.replace("Z", "+00:00") - ) + # 如果是ISO格式字符串,解析并转换为UTC+8 + if result_start_time.endswith("Z"): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat( + result_start_time.replace("Z", "+00:00") + ) + simulation_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + simulation_time = datetime.fromisoformat(result_start_time) + if simulation_time.tzinfo is None: + simulation_time = simulation_time.replace(tzinfo=UTC_8) else: simulation_time = result_start_time + if simulation_time.tzinfo is None: + simulation_time = simulation_time.replace(tzinfo=UTC_8) # Prepare node data for batch insert node_data = [] @@ -353,9 +367,19 @@ class RealtimeRepository: """ # Convert query_time string to datetime if isinstance(query_time, str): - target_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + if query_time.endswith("Z"): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + target_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + target_time = datetime.fromisoformat(query_time) + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) else: target_time = query_time + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) # Create time range: query_time ± 1 second start_time = target_time - timedelta(seconds=1) @@ -394,9 +418,19 @@ class RealtimeRepository: """ # Convert query_time string to datetime if isinstance(query_time, str): - target_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + if query_time.endswith("Z"): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + target_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + target_time = datetime.fromisoformat(query_time) + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) else: target_time = query_time + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) # Create time range: query_time ± 1 second start_time = target_time - timedelta(seconds=1) diff --git a/timescaledb/schemas/scheme.py b/timescaledb/schemas/scheme.py index 7d2021d..6f8e293 100644 --- a/timescaledb/schemas/scheme.py +++ b/timescaledb/schemas/scheme.py @@ -1,7 +1,10 @@ from typing import List, Any, Dict -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from psycopg import AsyncConnection, sql +# 定义UTC+8时区 +UTC_8 = timezone(timedelta(hours=8)) + class SchemeRepository: @@ -309,11 +312,20 @@ class SchemeRepository: """ # Convert result_start_time string to datetime if needed if isinstance(result_start_time, str): - simulation_time = datetime.fromisoformat( - result_start_time.replace("Z", "+00:00") - ) + # 如果是ISO格式字符串,解析并转换为UTC+8 + if result_start_time.endswith('Z'): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat(result_start_time.replace("Z", "+00:00")) + simulation_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + simulation_time = datetime.fromisoformat(result_start_time) + if simulation_time.tzinfo is None: + simulation_time = simulation_time.replace(tzinfo=UTC_8) else: simulation_time = result_start_time + if simulation_time.tzinfo is None: + simulation_time = simulation_time.replace(tzinfo=UTC_8) # Prepare node data for batch insert node_data = [] @@ -379,9 +391,19 @@ class SchemeRepository: """ # Convert query_time string to datetime if isinstance(query_time, str): - target_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + if query_time.endswith('Z'): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + target_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + target_time = datetime.fromisoformat(query_time) + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) else: target_time = query_time + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) # Create time range: query_time ± 1 second start_time = target_time - timedelta(seconds=1) @@ -422,9 +444,19 @@ class SchemeRepository: """ # Convert query_time string to datetime if isinstance(query_time, str): - target_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + if query_time.endswith('Z'): + # UTC时间,转换为UTC+8 + utc_time = datetime.fromisoformat(query_time.replace("Z", "+00:00")) + target_time = utc_time.astimezone(UTC_8) + else: + # 假设已经是UTC+8时间 + target_time = datetime.fromisoformat(query_time) + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) else: target_time = query_time + if target_time.tzinfo is None: + target_time = target_time.replace(tzinfo=UTC_8) # Create time range: query_time ± 1 second start_time = target_time - timedelta(seconds=1)