import datetime
def deserialize_timestamps(timestamps, version=None):
"""
Deserializes timestamps from a string or list, supporting older versions.
Args:
timestamps (str or list): String of comma-separated timestamps or a list of datetime objects.
version (int, optional): Version of the timestamp format. Defaults to None.
Returns:
list: A list of datetime objects. Returns an empty list if input is invalid.
"""
if isinstance(timestamps, str):
try:
timestamp_strings = timestamps.split(',')
timestamps_list = []
for ts_str in timestamp_strings:
ts_str = ts_str.strip()
if ts_str: # Avoid empty strings
try:
# Attempt to parse as ISO format (version 1)
dt = datetime.datetime.fromisoformat(ts_str.replace('Z', '+00:00'))
timestamps_list.append(dt)
except ValueError: #Handle older formats
try:
#Attempt to parse as a simple string format (version 0)
dt = datetime.datetime.strptime(ts_str, "%Y-%m-%d %H:%M:%S")
timestamps_list.append(dt)
except ValueError:
print(f"Invalid timestamp format: {ts_str}")
return [] # Return empty list on error
return timestamps_list
except Exception:
return []
elif isinstance(timestamps, list):
timestamps_list = []
for ts in timestamps:
if isinstance(ts, str):
try:
dt = datetime.datetime.fromisoformat(ts.replace('Z', '+00:00'))
timestamps_list.append(dt)
except ValueError:
try:
dt = datetime.datetime.strptime(ts, "%Y-%m-%d %H:%M:%S")
timestamps_list.append(dt)
except ValueError:
print(f"Invalid timestamp format: {ts}")
return []
elif isinstance(ts, datetime.datetime):
timestamps_list.append(ts)
else:
print(f"Invalid timestamp type: {type(ts)}")
return []
return timestamps_list
else:
print("Invalid input type. Must be string or list.")
return [] # Return empty list on error
if __name__ == '__main__':
# Example Usage
timestamps_str = "2023-10-26 10:00:00,2023-10-27 12:30:00"
timestamps_list = [datetime.datetime(2023, 10, 26, 10, 0, 0), datetime.datetime(2023, 10, 27, 12, 30, 0)]
timestamps_mixed = ["2023-10-26 10:00:00", datetime.datetime(2023, 10, 27, 12, 30, 0)]
deserialized_str = deserialize_timestamps(timestamps_str)
deserialized_list = deserialize_timestamps(timestamps_list)
deserialized_mixed = deserialize_timestamps(timestamps_mixed)
print(f"Deserialized string: {deserialized_str}")
print(f"Deserialized list: {deserialized_list}")
print(f"Deserialized mixed: {deserialized_mixed}")
#Example with invalid input
invalid_timestamps = "2023-10-26 10:00:00,invalid-date"
invalid_result = deserialize_timestamps(invalid_timestamps)
print(f"Invalid timestamps result: {invalid_result}")
Add your comment