(!******************************************************
Mosel Example Problems
======================
file dates.mos
``````````````
Working with dates and times.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Nov. 2007
*******************************************************!)
model "Dates and time"
uses "mmsystem", "mmjobs"
! **** Print current date and time with default format
writeln("Today: ", date(SYS_NOW), ", current time: ", time(SYS_NOW))
declarations
t: time
d,d2: date
now1,now2: datetime
DNAMES: array(1..7) of string
Dates: set of date
YEAR: array(NDates: set of integer) of integer
end-declarations
! **** Change the date and time formats for reading and writing
setparam("timefmt", "%h%p") ! h: hours in 1-12, p: am/pm
setparam("datefmt", "%m-%d-%y") ! m: month, d: day, y: year
initializations from "datetime.dat"
t as "Time1"
d as "Date1"
end-initializations
writeln(d, ", ", t)
setparam("timefmt", "%Hh%0M") ! H: hours in 0-23, M: minutes
setparam("datefmt", "%0d/%0m/%0Y") ! Y: year in 0-99
! 0: fill spaces with '0'
initializations from "datetime.dat"
t as "Time2"
d as "Date2"
end-initializations
writeln(d, ", ", t)
setparam("timefmt", "%H:%0M:%0S") ! S: seconds
setparam("datefmt", "%d-%N-%y") ! N: use month names
initializations from "datetime.dat"
t as "Time3"
d as "Date3"
end-initializations
writeln(d, ", ", t)
(! ****
The predefined month names may be changed (e.g., translated) by
specifying the names to be used.
!)
setparam("datefmt", "%d %N %y")
setparam("monthnames", "janvier fevrier mars avril mai juin juillet " +
"aout septembre octobre novembre decembre")
initializations from "datetime.dat"
d as "Date4"
end-initializations
writeln(d)
(! ****
Dates cannot be used for indexation:
Use the corresponding Julian Day number instead (obtained with 'getasnumber').
!)
setparam("datefmt", "") ! Back to default format
initializations from "datetime.dat"
Dates
end-initializations
writeln("Dates: ", Dates)
forall(dd in Dates) YEAR(getasnumber(dd)):= getyear(dd)
writeln("YEAR: ", YEAR)
forall(n in NDates) writeln(date(n)) ! Mapping back to original dates
! **** Validity check
d:= date(2000,0,0)
writeln(d, " is a valid date: ", if(isvalid(d), "true", "false"))
d2:= date(getasnumber(d))
writeln(d2, " is a valid date: ", if(isvalid(d2), "true", "false"))
t:= time(25,0)
writeln(t, " is a valid time: ", if(isvalid(t), "true", "false"))
t:= time(1,61)
writeln(t, " is a valid time: ", if(isvalid(t), "true", "false"))
! **** Operations on dates and times
! Difference between dates
writeln("February 2004 had ", date(2004,3,1)-date(2004,2,1), " days.")
! Retrieve the weekday
DNAMES:: (1..7)["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"]
writeln("1st January 2000 was a ", DNAMES(getweekday(date(2000,1,1))))
! Difference between times
now1:= datetime(SYS_NOW)
wait(1) ! Delay model execution for 1 second
now2:= datetime(SYS_NOW)
writeln("Time elapsed between ", now1, " and ", now2, ": ", now2-now1, "ms")
! Enumeration / addition to 'time'
setparam("timefmt", "%.h.%0M%p")
t:= time(11,0)
forall(i in 1..10) do
writeln(t)
t+=15*60*1000 ! Add 15 minutes
end-do
! Enumeration / addition to 'date'
setparam("datefmt", "%.d/%0m/%0Y") ! '.': fill spaces with blanks
d:= date(2005,12,20)
forall(i in 1..5) do
writeln(d)
d+=14 ! Add 14 days
end-do
end-model
|
!@encoding ISO8859-1
(!******************************************************
Mosel Example Problems
======================
file dates2.mos
```````````````
Working with dates and times.
!!! This file and its data file contain some non-ASCII
!!! characters that may not display properly depending
!!! on your system settings and the character encoding(s)
!!! supported by the editor you are using to visualize
!!! the files
The encoding of this file can be changed, for example to UTF-8,
by using the 'xprnls' tool from the command line:
xprnls conv -f ISO8859-1 -t UTF-8 -o dates_utf.mos dates2.mos
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Nov. 2007, rev. Oct 2017
*******************************************************!)
model "Dates and time"
uses "mmsystem", "mmjobs"
! **** Print current date and time with default format
writeln("Today: ", date(SYS_NOW), ", current time: ", time(SYS_NOW))
declarations
t: time
d,d2: date
now1,now2: datetime
DNAMES: array(1..7) of string
Dates: set of date
YEAR: array(NDates: set of integer) of integer
end-declarations
! **** Change the date and time formats for reading and writing
setparam("timefmt", "%h%p") ! h: hours in 1-12, p: am/pm
setparam("datefmt", "%m-%d-%y") ! m: month, d: day, y: year
initializations from "datetime2.dat"
t as "Time1"
d as "Date1"
end-initializations
writeln(d, ", ", t)
setparam("timefmt", "%Hh%0M") ! H: hours in 0-23, M: minutes
setparam("datefmt", "%0d/%0m/%0Y") ! Y: year in 0-99
! 0: fill spaces with '0'
initializations from "datetime2.dat"
t as "Time2"
d as "Date2"
end-initializations
writeln(d, ", ", t)
setparam("timefmt", "%H:%0M:%0S") ! S: seconds
setparam("datefmt", "%d-%N-%y") ! N: use month names
initializations from "datetime2.dat"
t as "Time3"
d as "Date3"
end-initializations
writeln(d, ", ", t)
(! ****
The predefined month names may be changed (e.g., translated) by
specifying the names to be used.
!)
setparam("datefmt", "%d %N %y")
setparam("monthnames", "janvier f�vrier mars avril mai juin juillet " +
"ao�t septembre octobre novembre d�cembre")
initializations from "datetime2.dat"
d as "Date4"
end-initializations
writeln(d)
(! ****
Dates cannot be used for indexation:
Use the corresponding Julian Day number instead (obtained with 'getasnumber').
!)
setparam("datefmt", "") ! Back to default format
initializations from "datetime2.dat"
Dates
end-initializations
writeln("Dates: ", Dates)
forall(dd in Dates) YEAR(getasnumber(dd)):= getyear(dd)
writeln("YEAR: ", YEAR)
forall(n in NDates) writeln(date(n)) ! Mapping back to original dates
! **** Validity check
d:= date(2000,0,0)
writeln(d, " is a valid date: ", if(isvalid(d), "true", "false"))
d2:= date(getasnumber(d))
writeln(d2, " is a valid date: ", if(isvalid(d2), "true", "false"))
t:= time(25,0)
writeln(t, " is a valid time: ", if(isvalid(t), "true", "false"))
t:= time(1,61)
writeln(t, " is a valid time: ", if(isvalid(t), "true", "false"))
! **** Operations on dates and times
! Difference between dates
writeln("February 2004 had ", date(2004,3,1)-date(2004,2,1), " days.")
! Retrieve the weekday
DNAMES:: (1..7)["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"]
writeln("1st January 2000 was a ", DNAMES(getweekday(date(2000,1,1))))
! Difference between times
now1:= datetime(SYS_NOW)
wait(1) ! Delay model execution for 1 second
now2:= datetime(SYS_NOW)
writeln("Time elapsed between ", now1, " and ", now2, ": ", now2-now1, "ms")
! Enumeration / addition to 'time'
setparam("timefmt", "%.h.%0M%p")
t:= time(11,0)
forall(i in 1..10) do
writeln(t)
t+=15*60*1000 ! Add 15 minutes
end-do
! Enumeration / addition to 'date'
setparam("datefmt", "%.d/%0m/%0Y") ! '.': fill spaces with blanks
d:= date(2005,12,20)
forall(i in 1..5) do
writeln(d)
d+=14 ! Add 14 days
end-do
end-model
|