Skip to content

Commit 7ded416

Browse files
committed
improve datetime range
1 parent 6ada768 commit 7ded416

File tree

1 file changed

+25
-7
lines changed
  • stac_fastapi/core/stac_fastapi/core

1 file changed

+25
-7
lines changed

stac_fastapi/core/stac_fastapi/core/core.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -428,18 +428,36 @@ def _return_date(
428428

429429
def _format_datetime_range(self, date_str: str) -> str:
430430
"""
431-
Convert a datetime range into a formatted string.
431+
Convert a datetime range string into a normalized UTC string for API requests.
432432
433433
Args:
434-
date_tuple (str): A string containing two datetime values separated by a '/'.
434+
date_str (str): A string containing two datetime values separated by a '/'.
435435
436436
Returns:
437-
str: A string formatted as 'YYYY-MM-DDTHH:MM:SS.sssZ/YYYY-MM-DDTHH:MM:SS.sssZ', with '..' used if any element is None.
437+
str: A string formatted as 'YYYY-MM-DDTHH:MM:SSZ/YYYY-MM-DDTHH:MM:SSZ', with '..' used if any element is None.
438438
"""
439-
start, end = date_str.split("/")
440-
start = start.replace("+01:00", "Z") if start else ".."
441-
end = end.replace("+01:00", "Z") if end else ".."
442-
return f"{start}/{end}"
439+
if not isinstance(date_str, str) or "/" not in date_str:
440+
return "../.."
441+
try:
442+
start, end = date_str.split("/", 1)
443+
except Exception:
444+
return "../.."
445+
446+
def normalize(dt):
447+
dt = dt.strip()
448+
if not dt or dt == "..":
449+
return ".."
450+
# Replace any timezone offset with 'Z'
451+
if dt.endswith("Z"):
452+
return dt
453+
if "+" in dt:
454+
return dt[: dt.index("+")] + "Z"
455+
if "-" in dt[10:]: # skip date part, look for tz in time part
456+
idx = dt.index("-", 10)
457+
return dt[:idx] + "Z"
458+
return dt # fallback, return as-is
459+
460+
return f"{normalize(start)}/{normalize(end)}"
443461

444462
async def get_search(
445463
self,

0 commit comments

Comments
 (0)