date.ifc2datetime - refactor for readability

This commit is contained in:
Andrej730
2025-07-25 13:08:31 +05:00
parent 3c338db364
commit 99cdc4da35
@@ -39,35 +39,39 @@ def timedelta2duration(timedelta):
def ifc2datetime(element: Union[str, int, ifcopenshell.entity_instance]): def ifc2datetime(element: Union[str, int, ifcopenshell.entity_instance]):
if isinstance(element, str) and "P" in element[0:2]: # IfcDuration if isinstance(element, str):
duration = parse_duration(element) if "P" in element[0:2]: # IfcDuration
if isinstance(duration, datetime.timedelta): duration = parse_duration(element)
return timedelta2duration(duration) if isinstance(duration, datetime.timedelta):
return duration return timedelta2duration(duration)
elif isinstance(element, str) and len(element) > 3 and element[2] == ":": # IfcTime return duration
return datetime.time.fromisoformat(element) elif len(element) > 3 and element[2] == ":": # IfcTime
elif isinstance(element, str) and ":" in element: # IfcDateTime return datetime.time.fromisoformat(element)
return datetime.datetime.fromisoformat(element) elif ":" in element: # IfcDateTime
elif isinstance(element, str): # IfcDate return datetime.datetime.fromisoformat(element)
return datetime.date.fromisoformat(element) else: # IfcDate
return datetime.date.fromisoformat(element)
elif isinstance(element, int): # IfcTimeStamp elif isinstance(element, int): # IfcTimeStamp
return datetime.datetime.fromtimestamp(element) return datetime.datetime.fromtimestamp(element)
elif element.is_a("IfcDateAndTime"):
return datetime.datetime( elif isinstance(element, ifcopenshell.entity_instance):
element.DateComponent.YearComponent, if element.is_a("IfcDateAndTime"):
element.DateComponent.MonthComponent, return datetime.datetime(
element.DateComponent.DayComponent, element.DateComponent.YearComponent,
element.TimeComponent.HourComponent, element.DateComponent.MonthComponent,
element.TimeComponent.MinuteComponent, element.DateComponent.DayComponent,
int(element.TimeComponent.SecondComponent), element.TimeComponent.HourComponent,
# TODO: implement TimeComponent timezone element.TimeComponent.MinuteComponent,
) int(element.TimeComponent.SecondComponent),
elif element.is_a("IfcCalendarDate"): # TODO: implement TimeComponent timezone
return datetime.date( )
element.YearComponent, elif element.is_a("IfcCalendarDate"):
element.MonthComponent, return datetime.date(
element.DayComponent, element.YearComponent,
) element.MonthComponent,
element.DayComponent,
)
def readable_ifc_duration(duration: str) -> str: def readable_ifc_duration(duration: str) -> str: