sclass DateStructures { asclass SomeDate {} asclass SomeWeek > SomeDate {} asclass DateProp {} // proposition on a date, e.g. a date range // years srecord Year(int year) > SomeDate {} srecord CurrentYearPlus(int nYears) > SomeDate {} // months srecord Month(int month, Year year) > SomeDate { Month(int month) { this(month, null); } } srecord CurrentMonthPlus(int nMonths) > SomeDate {} // weeks srecord Week(int week, Year year) > SomeWeek {} srecord CurrentWeekPlus(int nWeeks) > SomeWeek {} // days srecord Day(int day, Month month) > SomeDate {} srecord TodayPlus(int nDays) > SomeDate {} // weekdays srecord Weekday(int weekday, SomeWeek week) > SomeDate { // weekday is in Java count (1=Sunday) Weekday(int weekday) { this.weekday = weekday; } } // hours srecord Hour(int hour, Bool isPM, Day day) > SomeDate { Hour(int hour, Bool isPM) { this(hour, isPM, null); } } srecord CurrentHourPlus(int nHours) > SomeDate {} // minutes srecord Minute(int minute, Hour hour) > SomeDate {} srecord CurrentMinutePlus(int nMinutes) > SomeDate {} // seconds srecord Second(int second, Minute minute) > SomeDate {} // special stuff srecord BeginningOfTime > SomeDate {} srecord EndOfTime > SomeDate {} // date ranges & boolean operations srecord DateRange(SomeDate from, SomeDate to) > DateProp {} srecord Or(DateProp a, DateProp b) > DateProp {} srecord And(DateProp a, DateProp b) > DateProp {} srecord Not(DateProp a) > DateProp {} }