class Date issubclassof CalendarDefinition -- date /* Responsibility I am a date of Gregorio Calendar. Abstract I calculate date by cooperating with Calendar class. There can be two or more objects at the same date.
Therefore, it is judged that the date is equal by using EQ operation.
*/
instancevariables
private ModifiedJulianDate : real := 0; private usingCalendar : Calendar;
public getNumberOfDayOfTheWeek: () -> Calendar`NumberOfDayOfTheWeek
getNumberOfDayOfTheWeek() == calendar().getNumberOfDayOfTheWeek(self);
public getNameOfDayOfTheWeek : () -> Calendar`NameOfDayOfTheWeek
getNameOfDayOfTheWeek() == calendar().getNameOfDayOfTheWeek(self) ;
--指定された曜日が、selfとdateの間に何日あるかを返す。 public getNumberOfTheDayOfWeek: Date * Calendar`NameOfDayOfTheWeek -> int
getNumberOfTheDayOfWeek(date,nameOfDayOfTheWeek) == calendar().getNumberOfTheDayOfWeek(self,date,nameOfDayOfTheWeek);
--selfとdateの間の休日あるいは日曜日の数を返す(startDateを含む) public getTheNumberOfDayOff: Date -> int
getTheNumberOfDayOff(date) == calendar().getTheNumberOfDayOff(self,date);
--selfとdateの間の休日あるいは日曜日の数を返す(startDateを含まない) public getTheNumberOfDayOffExceptStartDate: Date -> int
getTheNumberOfDayOffExceptStartDate(date) == calendar().getTheNumberOfDayOffExceptStartDate(self,date) ;
--dateから、そのdateの属する年を求める。 public Year: () -> int
Year() == calendar().Year(self);
--dateから、そのdateの属する月を求める。 public Month: () -> int
Month() == calendar().Month(self);
--dateから、日を求める。 public day: () -> int
day() == calendar().day(self);
/* calculation */
--休日でないdateを返す(未来へ向かって探索する) public getFutureWeekday : ()-> Date
getFutureWeekday() == calendar().getFutureWeekday(self);
--休日でないdateを返す(過去へ向かって探索する) public getPastWeekday : ()-> Date
getPastWeekday() == calendar().getPastWeekday(self);
--selfに、平日n日分を加算する public addWeekday : int -> Date
addWeekday(addNumOfDays) == calendar().addWeekday(self,addNumOfDays);
--selfに、平日n日分を減算する public subtractWeekday : int -> Date
subtractWeekday(subtractNumOfDays) == calendar().subtractWeekday(self,subtractNumOfDays) ;
/* checking */
public isSunday : () -> bool
isSunday() == calendar().isSunday(self);
public isSaturday : () -> bool
isSaturday() == calendar().isSaturday(self);
public isWeekday : () -> bool
isWeekday() == calendar().isWeekday(self);
public isNotDayOff : () -> bool
isNotDayOff() == calendar().isNotDayOff(self);
public isDayOff : () -> bool
isDayOff() == calendar().isDayOff(self);
public isSundayOrDayoff : () -> bool
isSundayOrDayoff() == calendar().isSundayOrDayoff(self);
--new Date().getDateFrom_yyyy_mm_dd(2001,12,31).daysFromNewYear() = 365 public daysFromNewYear: () -> int
daysFromNewYear() == calendar().daysFromNewYear(self);
/* conversion */
public get_yyyy_mm_dd: () -> int * int * int
get_yyyy_mm_dd() == mk_(self.Year(), self.Month(), self.day());
private toStringAux: int -> seqofchar
toStringAux(i) == let str = Integer`asString in if i >= 10 then str(i) else"0" ^ str(i);
public date2Str: () -> seqofchar
date2Str() == self.asString();
operations
----conversion
public asString: () ==> seqofchar
asString() ==
(let asString =Integer`asString,
y = self.Year(),
m = self.Month(),
d = self.day(),
yearStr = asString(y),
monthStr = toStringAux(m),
dateStr = toStringAux(d) in return yearStr ^ monthStr ^ dateStr
);
public print: () ==> seqofchar
print() ==
(let asString =Integer`asString,
y = self.Year(),
m = self.Month(),
d = self.day(),
yearStr = asString(y),
monthStr = toStringAux(m),
dateStr = toStringAux(d) in return"Year=" ^ yearStr ^ ", Month=" ^ monthStr ^ ", Day=" ^ dateStr ^ ", "
);
----比較
/* 操作名 大小比較を行う関数群。 引数 date 返値 真ならtrueを返し、そうでなければfalseを返す。 内容 自身と与えられたdateの大小比較を行う。
*/ public LT: Date ==> bool
LT(date) == returnfloorself.getModifiedJulianDate() < floor date.getModifiedJulianDate();
public GT: Date ==> bool
GT(date) == returnfloorself.getModifiedJulianDate() > floor date.getModifiedJulianDate();
public LE: Date ==> bool
LE(date) == returnnotself.GT(date);
public GE: Date ==> bool
GE(date) == returnnotself.LT(date);
--自身と与えられたdateがEQか判定する。 public EQ: Date ==> bool--等しければtrueを返し、そうでなければfalseを返す。
EQ(date) == return (floorself.getModifiedJulianDate() = floor date.getModifiedJulianDate());
--自身と与えられたdateが等しくないか判定する。 public NE: Date ==> bool--等しければfalseを返し、そうでなければtrueを返す。
NE(date) == return (floorself.getModifiedJulianDate() <> floor date.getModifiedJulianDate());
----calculation
--自身にnumOfDaysを加算したdateを返す public plus: int ==> Date
plus(addNumOfDays) == return calendar().modifiedJulianDate2Date(self.getModifiedJulianDate() + addNumOfDays) ;
--自身からnumOfDaysを減算したdateを返す public minus: int ==> Date
minus(subtractNumOfDays) == return calendar().modifiedJulianDate2Date(self.getModifiedJulianDate() - subtractNumOfDays) ;
--インスタンス変数へのアクセス操作
--ModifiedJulianDate public setModifiedJulianDate: real ==> ()
setModifiedJulianDate(r) == ModifiedJulianDate := r;
public getModifiedJulianDate: () ==> real
getModifiedJulianDate() == return ModifiedJulianDate;
public calendar : () ==> Calendar
calendar() == return usingCalendar;
--Constructor public Date : Calendar * real ==> Date
Date(aCal, aModifiedJulianDate) ==
(
usingCalendar := aCal;
setModifiedJulianDate(aModifiedJulianDate); returnself
);
end Date
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.