Class DT_DATE_TIME_DURATION |
note
description: "Date/time durations (Gregorian calendar)" library: "Gobo Eiffel Time Library" author: "Eric Bezault <ericb@gobosoft.com>" copyright: "Copyright (c) 2000-2001, Eric Bezault and others" license: "MIT License"
class interface
DT_DATE_TIME_DURATION
inherit
DT_DATE_DURATION DT_DURATION KL_PART_COMPARABLE HASHABLE KL_CLONABLE DT_DATE_VALUE DT_GREGORIAN_CALENDAR DT_TIME_DURATION DT_DURATION KL_PART_COMPARABLE HASHABLE KL_CLONABLE DT_TIME_VALUE DT_GREGORIAN_CALENDAR DT_DATE_TIME_VALUE DT_DATE_VALUE DT_TIME_VALUE
create
make (y, m, d, h, mi, s: INTEGER) -- Create a new date time duration. ensure year_set: year = y month_set: month = m day_set: day = d hour_set: hour = h minute_set: minute = mi second_set: second = s millisecond_set: millisecond = 0make_precise (y, m, d, h, mi, s, ms: INTEGER) -- Create a new date time duration with millisecond precision. ensure year_set: year = y month_set: month = m day_set: day = d hour_set: hour = h minute_set: minute = mi second_set: second = s millisecond_set: millisecond = msmake_definite (d, h, mi, s: INTEGER) -- Create a new definite date time duration. ensure is_definite: is_definite day_set: day = d hour_set: hour = h minute_set: minute = mi second_set: second = s millisecond_set: millisecond = 0make_precise_definite (d, h, mi, s, ms: INTEGER) -- Create a new definite date time duration -- with millisecond precision. ensure is_definite: is_definite day_set: day = d hour_set: hour = h minute_set: minute = mi second_set: second = s millisecond_set: millisecond = msmake_canonical_definite (s: INTEGER) -- Create a new definite date time duration -- where the time part is canonical and has -- the same sign as the day part. ensure is_definite: is_definite canonical_time: time_duration.is_canonical second_count_set: s = second_count + day * Seconds_in_day millisecond_set: millisecond = 0make_precise_canonical_definite (ms: INTEGER) -- Create a new definite date time duration -- with millisecond precision, where the time -- part is canonical and has the same sign as -- the day part. ensure is_definite: is_definite canonical_time: time_duration.is_canonical millisecond_count_set: ms = millisecond_count + day * Milliseconds_in_daymake_from_date_time_duration (a_date_duration: DT_DATE_DURATION; a_time_duration: DT_TIME_DURATION) -- Create a new date time duration using -- a_date_duration and a_time_duration. require a_date_duration_not_void: a_date_duration /= Void a_time_duration_not_void: a_time_duration /= Void ensure year_set: year = a_date_duration.year month_set: month = a_date_duration.month day_set: day = a_date_duration.day hour_set: hour = a_time_duration.hour minute_set: minute = a_time_duration.minute second_set: second = a_time_duration.second millisecond_set: millisecond = a_time_duration.millisecondmake_from_date_duration (a_date_duration: DT_DATE_DURATION) -- Create a new date time duration using a_date_duration. require a_date_duration_not_void: a_date_duration /= Void ensure year_set: year = a_date_duration.year month_set: month = a_date_duration.month day_set: day = a_date_duration.day hour_set: hour = 0 minute_set: minute = 0 second_set: second = 0 millisecond_set: millisecond = 0
feature -- Access
year: INTEGER -- Year -- (From DT_DATE_VALUE.)month: INTEGER -- Month -- (From DT_DATE_VALUE.)day: INTEGER -- Day -- (From DT_DATE_VALUE.)hour: INTEGER -- Hour -- (From DT_TIME_VALUE.)minute: INTEGER -- Minute -- (From DT_TIME_VALUE.)second: INTEGER -- Second -- (From DT_TIME_VALUE.)millisecond: INTEGER -- Millisecond -- (From DT_TIME_VALUE.)second_count: INTEGER -- Total number of seconds -- (From DT_TIME_DURATION.) ensure definition: Result = ((hour * Minutes_in_hour + minute) * Seconds_in_minute + second + millisecond // 1000)millisecond_count: INTEGER -- Total number of milliseconds -- (From DT_TIME_DURATION.) ensure definition: Result = (((hour * Minutes_in_hour + minute) * Seconds_in_minute + second) * 1000 + millisecond)date_time (a_date_time: DT_DATE_TIME): DT_DATE_TIME -- Addition of current duration to a_date_time -- (Create a new object at each call.) -- (From absolute_time in DT_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure date_time_not_void: Result /= Void definition: Result.is_equal (a_date_time + Current)date_duration: DT_DATE_DURATION -- Date duration part -- (From date in DT_DATE_TIME_VALUE.) ensure date_duration_not_void: Result /= Void year_set: Result.year = year month_set: Result.month = month day_set: Result.day = daytime_duration: DT_TIME_DURATION -- Time duration part -- (From time in DT_DATE_TIME_VALUE.) ensure time_duration_not_void: Result /= Void hour_set: Result.hour = hour minute_set: Result.minute = minute second_set: Result.second = second millisecond_set: Result.millisecond = millisecondhash_code: INTEGER -- Hash code value -- (From HASHABLE.) ensure good_hash_value: Result >= 0
feature -- Status report
is_definite: BOOLEAN -- Is current duration independant of the date -- on which it applies (use of day only) -- or not (use of year, month and day)? -- (From DT_DATE_DURATION.) ensure definition: Result = (year = 0 and month = 0)is_canonical (a_date_time: like date_time): BOOLEAN -- Has current duration a canonical form -- when to be added to a_date_time? -- (From DT_DATE_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure positive_definition: Result implies ((a_date_time <= a_date_time + Current) implies (hour >= 0 and hour < Hours_in_day and minute >= 0 and minute < Minutes_in_hour and second >= 0 and second < Seconds_in_minute and millisecond >= 0 and millisecond < 1000 and year >= 0 and month >= 0 and month < Months_in_year and day >= 0 and ((day >= 0 (a_date_time + Current).day implies day < (a_date_time + Current).days_in_previous_month) or (day < (a_date_time + Current).day implies day < (a_date_time + Current).days_in_current_month)))) negative_definition: Result implies ((a_date_time >= a_date_time + Current) implies (hour <= 0 and hour > -Hours_in_day and minute <= 0 and minute > -Minutes_in_hour and second <= 0 and second > -Seconds_in_minute and millisecond <= 0 and millisecond > -1000 and year <= 0 and month <= 0 and month > -Months_in_year and day <= 0 and day > -(a_date_time + Current).days_in_current_month))is_time_canonical: BOOLEAN -- Has date time duration a canonical time part -- and has the time part same sign as the day part? -- (From is_canonical in DT_TIME_DURATION.) ensure positive_definition: Result implies (millisecond_count >= 0 implies (hour >= 0 and minute >= 0 and minute < Minutes_in_hour and second >= 0 and second < Seconds_in_minute and millisecond >= 0 and millisecond < 1000 and day >= 0)) negative_definition: Result implies (millisecond_count <= 0 implies (hour <= 0 and minute <= 0 and minute > -Minutes_in_hour and second <= 0 and second > -Seconds_in_minute and millisecond <= 0 and millisecond > -1000 and day <= 0))
feature -- Status setting
set_definite (a_date_time: like date_time) -- Set current duration to be definite -- when to be added to a_date_time. -- (From DT_DATE_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure is_definite: is_definite same_duration: (a_date_time + Current).is_equal (a_date_time + old cloned_object)set_canonical (a_date_time: like date_time) -- Set current duration to be canonical -- when to be added to a_date_time. -- (From DT_DATE_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure is_canonical: is_canonical (a_date_time) same_duration: (a_date_time + Current).is_equal (a_date_time + old cloned_object)set_time_canonical -- Set duration with its time part canonical -- and with the same sign as its day part. -- (From set_time_canonical in DT_TIME_DURATION.) ensure is_canonical: is_canonical same_duration: is_equal (old cloned_object) same_year: year = old year same_month: month = old month
feature -- Setting
set_date_duration (a_date_duration: DT_DATE_DURATION) -- Set date part of current date time duration. require a_date_duration_not_void: a_date_duration /= Void ensure year_set: year = a_date_duration.year month_set: month = a_date_duration.month day_set: day = a_date_duration.dayset_time_duration (a_time_duration: DT_TIME_DURATION) -- Set time part of current date time duration. require a_time_duration_not_void: a_time_duration /= Void ensure hour_set: hour = a_time_duration.hour minute_set: minute = a_time_duration.minute second_set: second = a_time_duration.second millisecond_set: millisecond = a_time_duration.millisecondset_year_month_day (y, m, d: INTEGER) -- Set year to y, month to m and day to d. -- (From DT_DATE_DURATION.) ensure year_set: year = y month_set: month = m day_set: day = dset_year (y: INTEGER) -- Set year to y. -- (From DT_DATE_DURATION.) ensure year_set: year = y same_month: month = old month same_day: day = old dayset_month (m: INTEGER) -- Set month to m. -- (From DT_DATE_DURATION.) ensure month_set: month = m same_year: year = old year same_day: day = old dayset_day (d: INTEGER) -- Set day to d. -- (From DT_DATE_DURATION.) ensure day_set: day = d same_year: year = old year same_month: month = old monthset_hour_minute_second (h, m, s: INTEGER) -- Set hour to h, minute to m and second to s. -- (From DT_TIME_DURATION.) ensure hour_set: hour = h minute_set: minute = m second_set: second = s millisecond_set: millisecond = 0set_precise_hour_minute_second (h, m, s, ms: INTEGER) -- Set hour to h, minute to m, second -- to s, and millisecond to ms. -- (From DT_TIME_DURATION.) ensure hour_set: hour = h minute_set: minute = m second_set: second = s millisecond_set: millisecond = msset_hour (h: INTEGER) -- Set hour to h. -- (From DT_TIME_DURATION.) ensure hour_set: hour = h same_minute: minute = old minute same_second: second = old second same_millisecond: millisecond = old millisecondset_minute (m: INTEGER) -- Set minute to m. -- (From DT_TIME_DURATION.) ensure minute_set: minute = m same_hour: hour = old hour same_second: second = old second same_millisecond: millisecond = old millisecondset_second (s: INTEGER) -- Set second to s. -- (From DT_TIME_DURATION.) ensure second_set: second = s same_hour: hour = old hour same_minute: minute = old minute same_millisecond: millisecond = old millisecondset_millisecond (ms: INTEGER) -- Set millisecond to ms. -- (From DT_TIME_DURATION.) ensure millisecond_set: millisecond = ms same_hour: hour = old hour same_minute: minute = old minute same_second: second = old second
feature -- Element change
add_years_months_days (y, m, d: INTEGER) -- Add y years, m months and d days to current duration. -- (From DT_DATE_DURATION.) ensure years_added: year = old year + y months_added: month = old month + m days_added: day = old day + dadd_years (y: INTEGER) -- Add y years to current duration. -- (From DT_DATE_DURATION.) ensure years_added: year = old year + yadd_months (m: INTEGER) -- Add m months to current duration. -- (From DT_DATE_DURATION.) ensure months_added: month = old month + madd_days (d: INTEGER) -- Add d days to current duration. -- (From DT_DATE_DURATION.) ensure days_added: day = old day + dadd_hours_minutes_seconds (h, m, s: INTEGER) -- Add h hours, m minutes and -- s seconds to current duration. -- (From DT_TIME_DURATION.) ensure hour_added: hour = old hour + h minute_added: minute = old minute + m second_added: second = old second + sadd_precise_hours_minutes_seconds (h, m, s, ms: INTEGER) -- Add h hours, m minutes, s seconds -- and ms milliseconds to current duration. -- (From DT_TIME_DURATION.) ensure hour_added: hour = old hour + h minute_added: minute = old minute + m second_added: second = old second + s millisecond_added: millisecond = old millisecond + msadd_hours (h: INTEGER) -- Add h hours to current duration. -- (From DT_TIME_DURATION.) ensure hour_added: hour = old hour + hadd_minutes (m: INTEGER) -- Add m minutes to current duration. -- (From DT_TIME_DURATION.) ensure minute_added: minute = old minute + madd_seconds (s: INTEGER) -- Add s seconds to current duration. -- (From DT_TIME_DURATION.) ensure second_added: second = old second + sadd_milliseconds (ms: INTEGER) -- Add ms milliseconds to current duration. -- (From DT_TIME_DURATION.) ensure millisecond_added: millisecond = old millisecond + ms
feature -- Basic operations
infix "+" (other: like Current): like Current -- Sum of current duration with other -- (From DT_DURATION.) require other_not_void: other /= Void ensure addition_not_void: Result /= Voidinfix "-" (other: like Current): like Current -- Difference with other -- (From DT_DURATION.) require other_not_void: other /= Void ensure subtraction_not_void: Result /= Voidprefix "+": like Current -- Unary plus -- (From DT_DURATION.) ensure unary_plus_not_void: Result /= Void same_object: Result = Currentprefix "-": like Current -- Unary minus -- (From DT_DURATION.) ensure unary_minus_not_void: Result /= Void
feature -- Comparison
infix "<" (other: like Current): BOOLEAN -- Is current date time duration less than other? -- (From KL_PART_COMPARABLE.) require other_not_void: other /= Void
infix "<=" (other: like Current): BOOLEAN -- Is current object less than or equal to other? -- (From KL_PART_COMPARABLE.) require other_not_void: other /= Void ensure definition: Result = ((Current < other) or is_equal (other))
infix ">=" (other: like Current): BOOLEAN -- Is current object greater than or equal to other? -- (From KL_PART_COMPARABLE.) require other_not_void: other /= Void ensure definition: Result = (other <= Current)
infix ">" (other: like Current): BOOLEAN -- Is current object greater than other? -- (From KL_PART_COMPARABLE.) require other_not_void: other /= Void ensure definition: Result = ((other < Current) or is_equal (other))
is_equal (other: like Current): BOOLEAN -- Is current date time duration equal to other? -- (From GENERAL.) require other_not_void: other /= Void ensure symmetric: Result implies other.is_equal (Current) consistent: standard_is_equal (other) implies Resultsame_date_duration (other: DT_DATE_DURATION): BOOLEAN -- Is date part of current duration equal to other? -- (From DT_DATE_DURATION.) require other_not_void: other /= Void ensure definition: Result = ((day = other.day) and ((year * Months_in_year + month) = (other.year * Months_in_year + other.month)))same_time_duration (other: DT_TIME_DURATION): BOOLEAN -- Is the time part of current duration equal to other? -- (From DT_TIME_DURATION.) require other_not_void: other /= Void ensure definition: Result = (millisecond_count = other.millisecond_count)same_date_time_duration (other: DT_DATE_TIME_DURATION): BOOLEAN -- Is current date time duration equal to other? require other_not_void: other /= Void ensure definition: Result = (((day * Milliseconds_in_day + millisecond_count) = (other.day * Milliseconds_in_day + other.millisecond_count)) and ((year * Months_in_year + month) = (other.year * Months_in_year + other.month)))
feature -- Duplication
copy (other: like Current) -- Copy other to current duration. -- (From GENERAL.) require other_not_void: other /= Void type_identity: same_type (other) ensure is_equal: is_equal (other)
feature -- Conversion
date_to_date_time_duration: DT_DATE_TIME_DURATION -- Date time duration equivalent to current date duration -- (From to_date_time_duration in DT_DATE_DURATION.) ensure date_time_duration_not_void: Result /= Void year_set: Result.year = year month_set: Result.month = month day_set: Result.day = day hour_set: Result.hour = 0 minute_set: Result.minute = 0 second_set: Result.second = 0 millisecond_set: Result.millisecond = 0time_to_date_time_duration: DT_DATE_TIME_DURATION -- Date time duration equivalent to current time duration -- (From to_date_time_duration in DT_TIME_DURATION.) ensure date_time_duration_not_void: Result /= Void year_set: Result.year = 0 month_set: Result.month = 0 day_set: Result.day = 0 hour_set: Result.hour = hour minute_set: Result.minute = minute second_set: Result.second = second millisecond_set: Result.millisecond = millisecondto_canonical (a_date_time: like date_time): like Current -- Canonical version of current duration -- when to be added to a_date_time -- (From DT_DATE_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure canonical_duration_not_void: Result /= Void is_canonical: Result.is_canonical (a_date_time) same_duration: (a_date_time + Current).is_equal (a_date_time + Result)to_time_canonical : like Current -- Version of current duration where the time part -- is canonical and has the same sign as the day part -- (From to_canonical in DT_TIME_DURATION.) ensure canonical_duration_not_void: Result /= Void is_canonical: Result.is_canonical same_duration: Result.is_equal (Current) same_year: Result.year = year same_month: Result.month = monthto_definite (a_date_time: like date_time): like Current -- Definite version of current duration -- when to be added to a_date_time -- (From DT_DATE_DURATION.) require a_date_time_not_void: a_date_time /= Void ensure definite_duration_not_void: Result /= Void is_definite: Result.is_definite same_duration: (a_date_time + Current).is_equal (a_date_time + Result)
feature -- Output
out: STRING -- Printable representation -- (year/month/day hour:minute:second[.millisecond]) -- (The millisecond part appears only when not zero.) -- (From GENERAL.) ensure out_not_void: Result /= Voidprecise_out: STRING -- Printable representation -- (year/month/day hour:minute:second.millisecond) -- (From DT_TIME_VALUE.) ensure precise_out_not_void: Result /= Voiddate_out: STRING -- Printable representation (year/month/day) -- (From DT_DATE_VALUE.) ensure date_out_not_void: Result /= Voidtime_out: STRING -- Printable representation (hour:minute:second[.millisecond]) -- (The millisecond part appears only when not zero.) -- (From DT_TIME_VALUE.) ensure time_out_not_void: Result /= Voidprecise_time_out: STRING -- Printable representation (hour:minute:second.millisecond) -- (From DT_TIME_VALUE.) ensure precise_time_out_not_void: Result /= Voidappend_to_string (a_string: STRING) -- Append printable representation -- (year/month/day hour:minute:second[.millisecond]) -- to a_string. -- (The millisecond part appears only when not zero.) -- (From DT_TIME_VALUE and DT_DATE_VALUE.) require a_string_not_void: a_string /= Voidappend_date_to_string (a_string: STRING) -- Append printable representation -- (year/month/day) to a_string. -- (From DT_DATE_VALUE.) require a_string_not_void: a_string /= Voidappend_time_to_string (a_string: STRING) -- Append printable representation -- (hour:minute:second[.millisecond]) to a_string. -- (The millisecond part appears only when not zero.) -- (From DT_TIME_VALUE.) require a_string_not_void: a_string /= Voidappend_precise_to_string (a_string: STRING) -- Append printable representation -- (year/month/day hour:minute:second.millisecond) -- to a_string. -- (From DT_TIME_VALUE.) require a_string_not_void: a_string /= Voidappend_precise_time_to_string (a_string: STRING) -- Append printable representation -- (hour:minute:second.millisecond) to a_string. -- (From DT_TIME_VALUE.) require a_string_not_void: a_string /= Void
feature -- Year
leap_year (y: INTEGER): BOOLEAN -- Is y a leap year? -- (From DT_GREGORIAN_CALENDAR.)Months_in_year: INTEGER -- Number of months in a year -- (From DT_GREGORIAN_CALENDAR.) ensure definition: Result = (December - Januray + 1)Days_in_year: INTEGER Days_in_leap_year: INTEGER -- Number of days in a (leap) year -- (From DT_GREGORIAN_CALENDAR.)Days_in_400_years: INTEGER Days_in_100_years: INTEGER Days_in_4_years: INTEGER Days_in_3_years: INTEGER Days_in_3_leap_years: INTEGER Days_in_2_years: INTEGER Days_in_2_leap_years: INTEGER -- Number of days in multiple years -- (From DT_GREGORIAN_CALENDAR.)
feature -- Month
January: INTEGER February: INTEGER March: INTEGER April: INTEGER May: INTEGER June: INTEGER July: INTEGER August: INTEGER September: INTEGER October: INTEGER November: INTEGER December: INTEGER -- Months -- (From DT_GREGORIAN_CALENDAR.)days_in_month (m, y: INTEGER): INTEGER -- Number of days in month m of year y -- (From DT_GREGORIAN_CALENDAR.) require m_large_enough: m >= January m_small_enough: m <= December ensure at_least_one: Result >= 1 max_days_in_month: Result <= Max_days_in_monthMax_days_in_month: INTEGER -- Maximum number of days in a month -- (From DT_GREGORIAN_CALENDAR.)days_at_month (m, y: INTEGER): INTEGER -- Number of days from beginning of year -- y until beginning of month m -- (From DT_GREGORIAN_CALENDAR.) require m_large_enough: m >= January m_small_enough: m <= December ensure days_positive: Result >= 0
feature -- Week day
Sunday: INTEGER Monday: INTEGER Tuesday: INTEGER Wednesday: INTEGER Thursday: INTEGER Friday: INTEGER Saturday: INTEGER -- Week days -- (From DT_GREGORIAN_CALENDAR.)Days_in_week: INTEGER -- Number of days in a week -- (From DT_GREGORIAN_CALENDAR.) ensure definition: Result = (Saturday - Sunday + 1)next_day (d: INTEGER): INTEGER -- Week day after d -- (From DT_GREGORIAN_CALENDAR.) require d_large_enough: d >= Sunday d_small_enough: d <= Saturday ensure sunday_definition: (d = Sunday) implies (Result = Monday) monday_definition: (d = Monday) implies (Result = Tuesday) tuesday_definition: (d = Tuesday) implies (Result = Wednesday) wednesday_definition: (d = Wednesday) implies (Result = Thursday) thursday_definition: (d = Thursday) implies (Result= Friday) friday_definition: (d = Friday) implies (Result = Saturday) saturday_definition: (d = Saturday) implies (Result = Sunday)previous_day (d: INTEGER): INTEGER -- Week day before d -- (From DT_GREGORIAN_CALENDAR.) require d_large_enough: d >= Sunday d_small_enough: d <= Saturday ensure sunday_definition: (d = Sunday) implies (Result = Saturday) monday_definition: (d = Monday) implies (Result = Sunday) tuesday_definition: (d = Tuesday) implies (Result = Monday) wednesday_definition: (d = Wednesday) implies (Result = Tuesday) thursday_definition: (d = Thursday) implies (Result= Wednesday) friday_definition: (d = Friday) implies (Result = Thursday) saturday_definition: (d = Saturday) implies (Result = Friday)
feature -- Time
Seconds_in_minute: INTEGER -- Number of seconds in a minute -- (From DT_GREGORIAN_CALENDAR.)Seconds_in_hour: INTEGER -- Number of seconds in an hour -- (From DT_GREGORIAN_CALENDAR.)Seconds_in_day: INTEGER -- Number of seconds in a day -- (From DT_GREGORIAN_CALENDAR.)Milliseconds_in_day: INTEGER -- Number of milliseconds in a day -- (From DT_GREGORIAN_CALENDAR.)Minutes_in_hour: INTEGER -- Number of minutes in an hour -- (From DT_GREGORIAN_CALENDAR.)Hours_in_day: INTEGER -- Number of hours in a day -- (From DT_GREGORIAN_CALENDAR.)
feature -- Epoch
Epoch_year: INTEGER Epoch_month: INTEGER Epoch_day: INTEGER -- Epoch date (1 Jan 1970) -- (From DT_GREGORIAN_CALENDAR.)epoch_days (y, m, d: INTEGER): INTEGER -- Number of days since epoch date (1 Jan 1970) -- (From DT_GREGORIAN_CALENDAR.) require m_large_enough: m >= January m_small_enough: m <= December d_large_enough: d >= 1 d_small_enough: d <= days_in_month (m, y)
end -- class DT_DATE_TIME_DURATION
Copyright © 2000-2001, Eric
Bezault mailto:ericb@gobosoft.com http://www.gobosoft.com Last Updated: 9 April 2001 |