mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 21:42:19 +00:00
date.ifc2datetime - refactor for readability
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user