EIFFELTIME
Készítette: Árvai Mária Tünde
people.inf.elte.hu/fluke/eiffel
3 típus:
• abszolút (pl. "Mennyi az idő?")
• intervallum
• időtartam (az időintervallum hossza)
Abszolút
konstansok:TIME_VALUE DATE_VALUE DATE_TIME_VALUE
DATETIME
DATE_TIME
DATE_DURATIONTIME_DURATION
DATE_TIME_DURATION
Származás
COMPARABLE
ABSOLUTE
DATE, TIME, DATE_TIME
TIME
• órák
• percek
• másodpercek
TIME létrehozása
• make(h,m,s: INTEGER)• make_now: a rendszeridő lekérdezése• make_by_seconds(sec: INTEGER)
TIME műveletei
• összehasonlítás: <, <=, >, >=, is_equal, =
• beállítás: set_hour(h: INTEGER)set_minute(m: INTEGER)set_second(s: INTEGER)
TIME műveletei
• összeadás:hour_add(h: INTEGER)minute_add(m: INTEGER)second_add(s: INTEGER)
• rákövetkező, megelőző:hour_forth, hour_backminute_forth, minute_backsecond_forth, second_back
DATE
• évek
• hónapok
• napok
Az időszámítás kezdete: 01/01/1600
DATE létrehozása
• make(y,m,d: INTEGER)make_month_day_year
(m,d,y: INTEGER)make_day_month_year
(d,m,y: INTEGER)• make_now: rendszerdátum• make_by_days(n: INTEGER):
az eltelt napok száma
DATE műveletei
• összehasonlítás: <, <=, >, >=, is_equal, =
• beállítás: set_year(y: INTEGER)set_month(m: INTEGER)set_day(d: INTEGER)(korlátok: set_month_cut_days,set_year_cut_days)
DATE műveletei
• összeadás:year_add(y: INTEGER)month_add(m: INTEGER)day_add(d: INTEGER)(augusztus 31. + 1 hónap = szeptember 30.)
• rákövetkező, megelőző:year_forth, year_backmonth_forth, month_backday_forth, day_back
DATE_TIME létrehozása
• make(y,mo,d,h,mi,s: INTEGER)• make_now: rendszerdátum, rendszeridő• make_by_date_time(d: DATE, t: TIME)
• make_by_date(d: DATE)
DATE_TIME műveletei
• összehasonítható
• elemenként változtatható
Intervallum
• INTERVALLUM osztály
• Két ugyanolyan, ABSOLUTE-ból származó osztály példányával foglalkozik
• start_bound, end_bound
Származás
COMPARABLE
ABSOLUTE
INTERVALLUM
INTERVALLUM létrehozása
• make(s,e: G)• set_start_bound(s: G)set_end_bound(e: G)
INTERVALLUM műveletei
• összehasonlítás:is_equal: értékeket és nem referenciákat <, <=, >, >=int1 < int2, ha int1 kezdete és
vége szigorúan megelőzi int2-t
INTERVALLUM műveletei
• intersects: két intervallum metszete• overlaps: van-e metszetükis_overlapped_by: az ellentéte
• meets, is_met_by: van-e közös határuk• includes strict_includesis_included_by is_strict_included_by
INTERVALLUM műveletei
• empty: egyenlőek a határok
• adott elem kapcsolata az intervallummalhas(v: G)strict_before(v: G) strict_after(v: G)before(v: G)after(v: G)
INTERVALLUM műveletei
• union• intersection• gather: unió, de kell közös rész
Időtartam
• DATE_DURATIONTIME_DURATION DATE_TIME_DURATIONosztályok
Származás
GROUP_ELEMENT PART_COMPARABLE
DURATION
DATE_DURATIONTIME_DURATION
DATE_TIME_DURATION
TIME_DURATION létrehozása
• make(h,m,s: INTEGER)• make_by_seconds(s: INTEGER)
TIME_DURATION műveletei
• összehasonlítás: <, <=, >, >=, is_equal, =1:-40:0 < 0:0:1800
• beállítás: set_hour(h: INTEGER)set_minute(m: INTEGER)set_second(s: INTEGER)
TIME_DURATION műveletei
• összeadás:hour_add(h: INTEGER)minute_add(m: INTEGER)second_add(s: INTEGER)
• +, -
TIME_DURATION műveletei
konverzió:• to_days25:70:600 => 1 (day)-23:-80:300 => 2 (day)
• time_modulo_day25:70:600 => 2:20:0-23:-80:300 => 23:45:0
kanonikus TIME_DURATION
canonical• pozitív: óra, perc, másodperc >= 0
perc, másodperc < 60
• negatív: óra, perc, másodperc <= 0perc, másodperc > -60
DATE_DURATION
• bonyolult
• két típus: definite és relative
definite DATE_DURATION
• definite = true• év, hónap = 0 <=> definite
definite DATE_DURATION műveletei
• összehasonlítás: <, <=, >, >=, is_equal, =csak két definite hasonlítható össze, különben hamisat ad
• kanonikus definite
relative DATE_DURATION
• definite = false• év, hónap, nap > 0
relative DATE_DURATION műveletei
• nem összehasonlítható• <, > mindig hamisat ad• is_equal
kanonikus relative DATE_DURATION
• canonical(date: DATE)• 1 <= hónap <= 12, 1 <= nap <= 30 (28)
• nem mindig tudunk 30 napot 1 hónappá konvertálni
• 01/15 – 02/14: kanonikus, nem tudunk
• 04/15 – 05/15: nem kanonikus => 1 hónap
• pozitív, negatív lehet
DATE_DURATION létrehozása
• make(y,m,d: INTEGER)ha y=m=0, akkor definite
• make_by_days(n: INTEGER)definite
DATE_DURATION műveletei
• összehasonlítás
• beállítás: set_date(y,m,d: INTEGER)set_year(y: INTEGER)set_month(m: INTEGER)set_day(d: INTEGER)
kanonikus DATE_DURATION
• canonical(date: DATE)• to_canonical
DATE_TIME_DURATION
• definite és relative
• kanonikus és nem kanonikus
DATE_TIME_DURATIONlétrehozása
• make(y,mo,d,h,mi,s: INTEGER)• make_definite(d,h,m,s: INTEGER)• make_by_date(d: DATE_DURATION)
idő = 0.0.0• make_by_date_time (d: DATE_DURATION,t: TIME_DURATION)
DATE_TIME_DURATIONműveletei
• összehasonlítás: <, <=, >, >=, is_equal, =ha mindkettő definite, akkor a napok összehasonlíthatóak, különben hamisat ad
• beállítás: set_date(d: DATE_DURATION)set_time(t: TIME_DURATION)
kanonikus DATE_TIME_DURATION
• canonical• to_canonical: csak ha mind a DATE,
mind a TIME kanonikus• time_to_canonical
DATE és TIMEstringgé konvertálása
Pontosság
TIME_VALUE• fine_second• fractional_second
TIME, TIME_DURATION
létrehozás:• make_fine(h,m: INTEGER, s: DOUBLE)
• make_by_fine_seconds(sec: INTEGER)
beállítás:• set_fine_second(s: DOUBLE)• set_fractionals(f: DOUBLE)
fine műveletei
• fine_seconds_add(f: DOUBLE)• canonical, to_canonical
people.inf.elte.hu/fluke/eiffel
Top Related