--currentDateTimeをreadFromFile public readCurrentDateTime : seqofchar * seqofchar * Calendar ==> [Time]
readCurrentDateTime(dateFileName, 時間fname, cal) == let mk_(結果, mk_(h, m, s, ms)) = io.freadval[int * int * int * int](時間fname) in if 結果 then let d = cal.readFromFiletoday(dateFileName) in returnnewTime(cal, d.Year(), d.Month(), d.day(), h, m, s, ms) else let - = io.echo("Can't read Current Date-Time data file.") in returnnil;
--インスタンス変数操作
public getDate : () ==> Date
getDate() == return sDate;
public setDate : Date ==> ()
setDate(aDate) == sDate := aDate;
public getTime : () ==> TimeInMilliSeconds
getTime() == return sTime;
public setTime : TimeInMilliSeconds ==> ()
setTime(aTime) == sTime :=aTime;
public hour: () ==> nat
hour() == let mk_(hour, -, -, -) = self.Time2IntProduct(self.getTime()) in return hour;
public setTimeFromNat : nat ==> ()
setTimeFromNat(aTime) == let mk_(-, aMinute, aSecond, milliSecond) = self.Time2IntProduct(self.getTime()) in self.setTime(IntProduct2TimeMillieSeconds(aTime, aMinute, aSecond, milliSecond));
public minute: () ==> nat
minute() == let mk_(-, aMinute, -, -) = self.Time2IntProduct(self.getTime()) in return aMinute;
public setMinuteFromNat : nat ==> ()
setMinuteFromNat(minute) == let mk_(hour, -, aSecond, milliSecond) = self.Time2IntProduct(self.getTime()) in self.setTime(IntProduct2TimeMillieSeconds(hour, minute, aSecond, milliSecond));
public second: () ==> nat
second() == let mk_(-, -, aSecond, -) = self.Time2IntProduct(self.getTime()) in return aSecond;
public setSecond : nat ==> ()
setSecond(aSecond) == let mk_(hour, aMinute, -, milliSecond) = self.Time2IntProduct(self.getTime()) in self.setTime(IntProduct2TimeMillieSeconds(hour, aMinute, aSecond, milliSecond));
public milliSecond: () ==> nat
milliSecond() == let mk_(-, -, -, milliSecond) = self.Time2IntProduct(self.getTime()) in return milliSecond;
public setMilliSecond : nat ==> ()
setMilliSecond(aMilliSecond) == let mk_(hour, aMinute, aSecond, -) = self.Time2IntProduct(self.getTime()) in self.setTime(IntProduct2TimeMillieSeconds(hour, aMinute, aSecond, aMilliSecond));
functions -- Get attribute.
--時間から、その時間の属する暦を求める。 public calendar : () -> Calendar
calendar() == getDate().calendar();
--時間から、その時間の属する年を求める。 public Year: () -> int
Year() == self.getDate().calendar().Year(self.getDate());
--時間から、その時間の属する月を求める。 public Month: () -> int
Month() == self.getDate().calendar().Month(self.getDate());
--時間から、日を求める。 public day: () -> int
day() == self.getDate().calendar().day(self.getDate());
public getTimeAsNat : () -> nat
getTimeAsNat() == self.getTime();
----Compare
public LT: Time -> bool
LT(aTime) == let date1 = floorself.getDate().getModifiedJulianDate(),
date2 = floor aTime.getDate().getModifiedJulianDate() in casestrue :
(date1 < date2) -> true,
(date1 = date2) -> ifself.getTimeAsNat() < aTime.getTimeAsNat() then true else false, others -> false end;
public GT: Time -> bool
GT(aTime) == not (self.LT(aTime) orself.EQ(aTime));
public LE: Time -> bool
LE(aTime) == notself.GT(aTime);
public GE: Time -> bool
GE(aTime) == notself.LT(aTime);
--自身と与えられた時間がEQか判定する。 public EQ: Time -> bool
EQ(aTime) == self.getDate().EQ(aTime.getDate()) andself.getTimeAsNat() = aTime.getTimeAsNat();
--自身と与えられた時間が等しくないか判定する。 public NE: Time -> bool
NE(aTime) == notself.EQ(aTime);
--変換
public IntProduct2TimeMillieSeconds : int * int * int * int -> int
IntProduct2TimeMillieSeconds(hour, aMinute, aSecond, milliSecond) ==((hour * minutesPerHour + aMinute) * secondsPerMinute + aSecond) * ミリ + milliSecond;
public Time2IntProduct : TimeInMilliSeconds -> nat * nat * nat * nat
Time2IntProduct(aTime) == let hms = aTime div ミリ,
milliSecond = aTime mod ミリ,
hm = hms div secondsPerMinute,
aSecond = hms mod secondsPerMinute,
hour = hm div minutesPerHour,
aMinute = hm mod minutesPerHour in
mk_(hour, aMinute, aSecond, milliSecond);
operations public asString : () ==> seqofchar
asString() == let mk_(hour, aMinute, aSecond, milliSecond) = self.Time2IntProduct(self.getTime()) in return self.getDate().asString() ^
Integer`asString(hour) ^
Integer`asString(aMinute) ^
Integer`asString(aSecond) ^
Integer`asStringZ("009")(milliSecond);
--milliSecondを加算する public plusmilliSecond : int ==> Time
plusmilliSecond(aMilliSecond) == lettime = self.getTime() + aMilliSecond,
CarriedNumOfDays = iftime >= 0 then timediv milliSecondsPerDay else timediv milliSecondsPerDay - 1,
newTime = timemod milliSecondsPerDay in
( dcl aTime : Time := newTime(self.calendar(), self.Year(), self.Month(), self.day()) ;
aTime.setTime(newTime);
aTime.setDate(aTime.getDate().plus(CarriedNumOfDays)); return aTime
);
public plussecond : int ==> Time
plussecond(aSecond) == self.plusmilliSecond(aSecond * ミリ);
public plusminute : int ==> Time
plusminute(minute) == self.plusmilliSecond(minute * secondsPerMinute * ミリ);
public plushour : int ==> Time
plushour(hour) == self.plusmilliSecond(hour * minutesPerHour * secondsPerMinute * ミリ);
public plus: int * int * int * int ==> Time
plus(hour, aMinute, aSecond, milliSecond) == self.plusmilliSecond(IntProduct2TimeMillieSeconds(hour, aMinute, aSecond, milliSecond));
--milliSecondを減算する public minusmilliSecond : int ==> Time
minusmilliSecond(aMilliSecond) == returnself.plusmilliSecond(-aMilliSecond);
public minus: int * int * int * int ==> Time
minus(hour, aMinute, aSecond, milliSecond) == self.minusmilliSecond(IntProduct2TimeMillieSeconds(hour, aMinute, aSecond, milliSecond));
endTime
¤ 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.