\section{SBCalendar}
\subsection{Responsibility}
I'm a calendar of Japanese borkerage firm.
\subsection{Abstract}
I consider day off of company, country.
\begin{vdm_al} class SBCalendar issubclassof JapaneseCalendar -- date
values
io = new IO();
calendar = new SBCalendar();
instancevariables
public iTodayOnBusiness : [Date] := nil; -- This value express today for test. public iTodayOnCompanyMap : [mapseqofcharto Date] := { |-> }; -- a map of companyCode to todayOnBusiness public timeOfSystem : [Time] := nil; -- This value express now for test.
\begin{vdm_al} staticpublic getContractDate : Date -> Date
getContractDate(aDate) == let
mk_(year, month) = calendar.getMonthOf6monthsLater(aDate.Year(), aDate.Month()),
date = aDate.day(),
candidateDate = getCandidateDate(year, month, date) in
candidateDate.getPastWeekday() --Sometime the result is a date of previous month. --pre --aDate.isNotDayOff() post let
mk_(year, month) = calendar.getMonthOf6monthsLater(aDate.Year(), aDate.Month()),
date = aDate.day(),
candidateDate = getCandidateDate(year, month, date) in RESULT.EQ(candidateDate.getPastWeekday()) and if isDayoffFromTheBeginingOfMonthToCandidateDate(candidateDate) then RESULT.Month() = getPreviousMonth(year, month) else RESULT.Month() = month;
staticpublic getMonthOf6monthsLater : int * int -> int * int
getMonthOf6monthsLater(year, month) == calendar.getRegularMonth(year, month+6);
staticpublic getCandidateDate : int * int * int -> Date
getCandidateDate(year, month, date) == let dateOfEndOfMonth = calendar.getLastDayOfMonth(year, month) in if dateOfEndOfMonth.day() < date then
dateOfEndOfMonth else
calendar.getDateFrom_yyyy_mm_dd(year, month, date);
staticpublic isDayoffFromTheBeginingOfMonthToCandidateDate : Date -> bool
isDayoffFromTheBeginingOfMonthToCandidateDate(candidateDate) == forall day inset {1, ..., candidateDate.day()} &
calendar.isSundayOrDayoff(calendar.getDateFrom_yyyy_mm_dd(candidateDate.Year(), candidateDate.Month(), day));
staticpublic getPreviousMonth : int * int -> int
getPreviousMonth(year, month) == let mk_(-, previousMonth) = calendar.getRegularMonth(year, month-1) in
previousMonth;
staticpublic isDateNil: [Date] -> bool
isDateNil(date) == date = nil; --or date = maxDate();
staticpublic systemDate : () -> Date
systemDate() == calendar.today();
operations public setTheSetOfDayOffs: int ==> () -- get the set of dayoff, but Sundays are not in set
setTheSetOfDayOffs(year) == let japaneseCalendar = new JapaneseCalendar(),
japaneseDayoffSet = japaneseCalendar.getSetOfDayOff(year),
TR1のsetOfDayOff = {
japaneseCalendar.getDateFrom_yyyy_mm_dd(year,1,2),
japaneseCalendar.getDateFrom_yyyy_mm_dd(year,1,3),
japaneseCalendar.getDateFrom_yyyy_mm_dd(year,12,29),
japaneseCalendar.getDateFrom_yyyy_mm_dd(year,12,30),
japaneseCalendar.getDateFrom_yyyy_mm_dd(year,12,31)
},
saturdaySet = japaneseCalendar.getDayOfTheWeekInYear(year,<Sat>) in
Year2Holidays := Year2Holidays munion { year |-> japaneseDayoffSet union TR1のsetOfDayOff union saturdaySet} pre
year >= 2000;
--todayOnBusinessをreadFromFile public readTodayOnBusiness : seqofchar ==> [Date]
readTodayOnBusiness(fname) == let mk_(rslt, mk_(y,m,d)) = io.freadval[int * int * int](fname) in if rslt then return getDateFrom_yyyy_mm_dd(y,m,d) else let - = io.echo("Can't read BaseDay's data file.") in returnnil;
--get today for test public todayOnBusiness: () ==> Date
todayOnBusiness() == if iTodayOnBusiness = nilthen return readTodayOnBusiness(homedir ^ "/temp/BaseDay.txt") else return iTodayOnBusiness;
public readFromFiletodayOnBusiness: seqofchar ==> Date
readFromFiletodayOnBusiness(fname) == if iTodayOnBusiness = nilthen return readTodayOnBusiness(fname) else return iTodayOnBusiness;
public setTodayOnBusiness : Date ==> ()
setTodayOnBusiness(date) == iTodayOnBusiness := date;
-- get today for system. For example, many business systems thinks just after midnight is as "today" public todayOnCompany: seqofchar ==> Date
todayOnCompany(companyCode) ==
( if iTodayOnCompanyMap = nilthen
setTodayOnCompany(companyCode,todayOnBusiness()); return iTodayOnCompanyMap(companyCode)
);
public setTodayOnCompany : seqofchar * Date ==> ()
setTodayOnCompany(companyCode,date) == iTodayOnCompanyMap := iTodayOnCompanyMap ++ { companyCode |-> date };
public readSystemTime : () ==> [Time]
readSystemTime() == let mk_(rslt, now) = io.freadval[Time](homedir ^ "/temp/SystemTime.txt") in if rslt then return now else let - = io.echo("Can't read System Time data file.") in returnnil;
public systemTime : () ==> Time
systemTime() == if timeOfSystem = nilthen
readSystemTime() else return timeOfSystem;
public setSystemTime : Time ==> ()
setSystemTime(t) == timeOfSystem := t;
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.