From a9c3e5170fa454274a9ffa48826d40b76d7eb46c Mon Sep 17 00:00:00 2001 From: ninthcircle Date: Sat, 12 Sep 2026 07:58:41 +0530 Subject: [PATCH] fix: replace strptime with fromisoformat for date parsing --- mssql_python/cursor.py | 42 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/mssql_python/cursor.py b/mssql_python/cursor.py index 1cb12cb4..1775ca77 100644 --- a/mssql_python/cursor.py +++ b/mssql_python/cursor.py @@ -447,13 +447,10 @@ def _parse_date(self, param: str) -> Optional[datetime.date]: Returns: A datetime.date object if parsing is successful, else None. """ - formats = ["%Y-%m-%d"] - for fmt in formats: - try: - return datetime.datetime.strptime(param, fmt).date() - except ValueError: - continue - return None + try: + return datetime.date.fromisoformat(param) + except ValueError: + return None def _parse_datetime(self, param: str) -> Optional[datetime.datetime]: """ @@ -465,19 +462,10 @@ def _parse_datetime(self, param: str) -> Optional[datetime.datetime]: Returns: A datetime.datetime object if parsing is successful, else None. """ - formats = [ - "%Y-%m-%dT%H:%M:%S.%f", # ISO 8601 datetime with fractional seconds - "%Y-%m-%dT%H:%M:%S", # ISO 8601 datetime - "%Y-%m-%d %H:%M:%S.%f", # Datetime with fractional seconds - "%Y-%m-%d %H:%M:%S", # Datetime without fractional seconds - ] - for fmt in formats: - try: - return datetime.datetime.strptime(param, fmt) # Valid datetime - except ValueError: - continue # Try next format - - return None # If all formats fail, return None + try: + return datetime.datetime.fromisoformat(param) + except ValueError: + return None def _parse_time(self, param: str) -> Optional[datetime.time]: """ @@ -489,16 +477,10 @@ def _parse_time(self, param: str) -> Optional[datetime.time]: Returns: A datetime.time object if parsing is successful, else None. """ - formats = [ - "%H:%M:%S", # Time only - "%H:%M:%S.%f", # Time with fractional seconds - ] - for fmt in formats: - try: - return datetime.datetime.strptime(param, fmt).time() - except ValueError: - continue - return None + try: + return datetime.time.fromisoformat(param) + except ValueError: + return None def _get_numeric_data(self, param: decimal.Decimal) -> Any: """