Select Date Time
Overview
Provides the means for specifying date/time values to attributes.
Date/time values may be defined for:
- Date only
- Date values may be specified using year, month, date attributes up to IFC 2x3.
- Date values are extended to deal with historical and approximate dating from IFC 2x4.
- Time only
- Time values can be set in local time and can include offset from coordinated universal time (Greenwich Mean Time) and daylight saving offset.
- Both date and time
Results
Specifies date and/or time.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| Select whether date or time or date and time is to be used | IfcDateTimeSelect | |||
| If date is selected | ||||
|
IfcCalendarDate.YearComponent::IfcYearNumber | |||
|
IfcCalendarDate.MonthComponent::IfcMonthInYearYearNumber | |||
|
IfcCalendarDate.DayComponent::IfcDayInMonthNumber | |||
| If time is selected | ||||
|
IfcLocalTime.HourComponent::IfcHourInDay | |||
|
IfcLocalTime.MinuteComponent::IfcMinuteInHour | |||
|
IfcLocalTime.SecondComponent::IfcSecondInMinute | |||
|
IfcLocalTime.DaylightSavingOffsetLLIfcDaylightSavingHour | |||
|
IfcLocalTime.Zone::IfcCoordinatedUniversalTimeOffset | |||
|
IfcCoordinatedUniversalTimeOffset.HourOffset::IfcHourInDay | |||
|
IfcCoordinatedUniversalTimeOffset.MinuteOffset::IfcMinuteInHour | |||
|
IfcCoordinatedUniversalTimeOffset.Sense::IfcAheadOrBehind | |||
| If date and time is selected | ||||
|
IfcDateAndTime.DateComponent::IfcCalendarDate | |||
|
IfcDateAndTime.TimeComponent::IfcLocalTime |
IFC Entities Required
- IfcCalendarDate
- IfcLocalTime
- IfcCoordinatedUniversalTimeOffset
- IfcDateAndTime
IFC Datatypes Required
- IfcDayInMonthNumber
- IfcDaylightSavingHour
- IfcHourInDay
- IfcMinuteInHour
- IfcMonthInYearNumber
- IfcSecondInMinute
- IfcYearNumber
- IfcAheadOrBehind
IFC Functions Required
- IfcLeapYear
- IfcValidCalendarDate
- IfcValidTime
IFC Property Sets Required
- -
IDM Functional Parts Required
? -
EXPRESS-G
EXPRESS Schema
SCHEMA FP_SELECT_DATE_TIME;
TYPE IfcDayInMonthNumber = INTEGER;
END_TYPE;
TYPE IfcDaylightSavingHour = INTEGER;
WHERE
WR1 : { 0 <= SELF <= 2 };
END_TYPE;
TYPE IfcHourInDay = INTEGER;
WHERE
WR1 : { 0 <= SELF < 24 };
END_TYPE;
TYPE IfcMinuteInHour = INTEGER;
WHERE
WR1 : {0 <= SELF <= 59 };
END_TYPE;
TYPE IfcMonthInYearNumber = INTEGER;
WHERE
WR1 : { 1<= SELF <= 12 };
END_TYPE;
TYPE IfcSecondInMinute = REAL;
WHERE
WR1 : { 0 <= SELF < 60 };
END_TYPE;
TYPE IfcYearNumber = INTEGER;
END_TYPE;
TYPE IfcAheadOrBehind = ENUMERATION OF
(AHEAD,
BEHIND);
END_TYPE;
ENTITY IfcCalendarDate;
DayComponent : IfcDayInMonthNumber;
MonthComponent : IfcMonthInYearNumber;
YearComponent : IfcYearNumber;
WHERE
WR21 : IfcValidCalendarDate (SELF);
END_ENTITY;
ENTITY IfcLocalTime;
HourComponent : IfcHourInDay;
MinuteComponent : OPTIONAL IfcMinuteInHour;
SecondComponent : OPTIONAL IfcSecondInMinute;
Zone : OPTIONAL IfcCoordinatedUniversalTimeOffset;
DaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;
WHERE
WR21 : IfcValidTime (SELF);
END_ENTITY;
ENTITY IfcCoordinatedUniversalTimeOffset;
HourOffset : IfcHourInDay;
MinuteOffset : OPTIONAL IfcMinuteInHour;
Sense : IfcAheadOrBehind;
END_ENTITY;
ENTITY IfcDateAndTime;
DateComponent : IfcCalendarDate;
TimeComponent : IfcLocalTime;
END_ENTITY;
FUNCTION IfcValidCalendarDate
(Date : IfcCalendarDate) : LOGICAL;
IF NOT ({1 <= Date.DayComponent <= 31}) THEN
RETURN(FALSE);
END_IF;
CASE Date.MonthComponent OF
4 : RETURN({ 1<= Date.DayComponent <= 30});
6 : RETURN({ 1<= Date.DayComponent <= 30});
9 : RETURN({ 1<= Date.DayComponent <= 30});
11 : RETURN({ 1<= Date.DayComponent <= 30});
2 :
BEGIN
IF (IfcLeapYear(Date.YearComponent)) THEN
RETURN({ 1<= Date.DayComponent <= 29});
ELSE
RETURN({ 1<= Date.DayComponent <= 28});
END_IF;
END;
OTHERWISE : RETURN(TRUE);
END_CASE;
END_FUNCTION;
FUNCTION IfcValidTime
(Time: IfcLocalTime) : BOOLEAN;
IF EXISTS (Time.SecondComponent) THEN
RETURN (EXISTS (Time.MinuteComponent));
ELSE
RETURN (TRUE);
END_IF;
END_FUNCTION;
FUNCTION IfcLeapYear
(Year : IfcYearNumber)
:BOOLEAN;
IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR
((Year MOD 400) = 0)) THEN
RETURN(TRUE);
ELSE
RETURN(FALSE);
END_IF;
END_FUNCTION;
END_SCHEMA;