Up | TOC | Index | |||||
<< 7 Included Tools | < 8.3 Console | Up: 8 API Reference | 8.5 File System > | 9 Release Notes >> |
8.4 Date/Time
8.4.1 Localized Variables
8.4.1.1 month_names
include std/datetime.e namespace datetime public sequence month_names
Names of the months
8.4.1.2 month_abbrs
include std/datetime.e namespace datetime public sequence month_abbrs
Abbreviations of month names
8.4.1.3 day_names
include std/datetime.e namespace datetime public sequence day_names
Names of the days
8.4.1.4 day_abbrs
include std/datetime.e namespace datetime public sequence day_abbrs
Abbreviations of day names
8.4.1.5 ampm
include std/datetime.e namespace datetime public sequence ampm
AM/PM
8.4.2 Date/Time type Accessors
These accessors can be used with the datetime type.
8.4.2.1 YEAR
include std/datetime.e namespace datetime public enum YEAR
Year (full year, i.e. 2010, 1922, )
8.4.2.2 MONTH
include std/datetime.e namespace datetime public enum MONTH
Month (1-12)
8.4.2.3 DAY
include std/datetime.e namespace datetime public enum DAY
Day (1-31)
8.4.2.4 HOUR
include std/datetime.e namespace datetime public enum HOUR
Hour (0-23)
8.4.2.5 MINUTE
include std/datetime.e namespace datetime public enum MINUTE
Minute (0-59)
8.4.2.6 SECOND
include std/datetime.e namespace datetime public enum SECOND
Second (0-59)
8.4.3 Intervals
These constant enums are to be used with the add and subtract routines.
8.4.3.1 YEARS
include std/datetime.e namespace datetime public enum YEARS
Years
8.4.3.2 MONTHS
include std/datetime.e namespace datetime public enum MONTHS
Months
8.4.3.3 WEEKS
include std/datetime.e namespace datetime public enum WEEKS
Weeks
8.4.3.4 DAYS
include std/datetime.e namespace datetime public enum DAYS
Days
8.4.3.5 HOURS
include std/datetime.e namespace datetime public enum HOURS
Hours
8.4.3.6 MINUTES
include std/datetime.e namespace datetime public enum MINUTES
Minutes
8.4.3.7 SECONDS
include std/datetime.e namespace datetime public enum SECONDS
Seconds
8.4.3.8 DATE
include std/datetime.e namespace datetime public enum DATE
Date
8.4.4 Types
8.4.4.1 datetime
include std/datetime.e namespace datetime public type datetime(object o)
datetime type
Parameters:
- obj : any object, so no crash takes place.
Comments:
A datetime type consists of a sequence of length 6 in the form {year, month, day_of_month, hour, minute, second}. Checks are made to guarantee those values are in range.
Note:
All components must be integers except seconds, as those can also be floating point values.
8.4.5 Routines
8.4.5.1 time
<built-in> function time()
Return the number of seconds since some fixed point in the past.
Returns:
An atom, which represents an absolute number of seconds.
Comments:
Take the difference between two readings of time(), to measure, for example, how long a section of code takes to execute.
On some machines, time() can return a negative number. However, you can still use the difference in calls to time() to measure elapsed time.
Example 1:
constant ITERATIONS = 1000000 integer p atom t0, loop_overhead t0 = time() for i = 1 to ITERATIONS do -- time an empty loop end for loop_overhead = time() - t0 t0 = time() for i = 1 to ITERATIONS do p = power(2, 20) end for ? (time() - t0 - loop_overhead)/ITERATIONS -- calculates time (in seconds) for one call to power
See Also:
8.4.5.2 date
<built-in> function date()
Return a sequence with information on the current date.
Returns:
A sequence of length 8, laid out as follows:
- year -- since 1900
- month -- January = 1
- day -- day of month, starting at 1
- hour -- 0 to 23
- minute -- 0 to 59
- second -- 0 to 59
- day of the week -- Sunday = 1
- day of the year -- January 1st = 1
Comments:
The value returned for the year is actually the number of years since 1900 (not the last 2 digits of the year). In the year 2000 this value was 100. In 2001 it was 101, etc.
Example 1:
now = date() -- now has: {95,3,24,23,47,38,6,83} -- i.e. Friday March 24, 1995 at 11:47:38pm, day 83 of the year
See Also:
8.4.5.3 from_date
include std/datetime.e namespace datetime public function from_date(sequence src)
Convert a sequence formatted according to the built-in date() function to a valid datetime sequence.
Parameters:
- src : a sequence which date() might have returned
Returns:
A sequence, more precisely a datetime corresponding to the same moment in time.
Example 1:
d = from_date(date()) -- d is the current date and time
See Also:
8.4.5.4 now
include std/datetime.e namespace datetime public function now()
Create a new datetime value initialized with the current date and time
Returns:
A sequence, more precisely a datetime corresponding to the current moment in time.
Example 1:
dt = now() -- dt is the current date and time
See Also:
from_date, from_unix, new, new_time, now_gmt
8.4.5.5 now_gmt
include std/datetime.e namespace datetime public function now_gmt()
Create a new datetime value that falls into the Greenwich Mean Time (GMT) timezone. This function will return a datetime that is GMT, no matter what timezone the system is running under.
Example 1:
dt = now_gmt() -- If local time was July 16th, 2008 at 10:34pm CST -- dt would be July 17th, 2008 at 03:34pm GMT
See Also:
8.4.5.6 new
include std/datetime.e namespace datetime public function new(integer year = 0, integer month = 0, integer day = 0, integer hour = 0, integer minute = 0, atom second = 0)
Create a new datetime value.
Parameters:
- year -- the full year.
- month -- the month (1-12).
- day -- the day of the month (1-31).
- hour -- the hour (0-23) (defaults to 0)
- minute -- the minute (0-59) (defaults to 0)
- second -- the second (0-59) (defaults to 0)
Example 1:
dt = new(2010, 1, 1, 0, 0, 0) -- dt is Jan 1st, 2010
See Also:
from_date, from_unix, now, new_time
8.4.5.7 new_time
include std/datetime.e namespace datetime public function new_time(integer hour, integer minute, atom second)
Create a new datetime value with a date of zeros.
Parameters:
- hour : is the hour (0-23)
- minute : is the minute (0-59)
- second : is the second (0-59)
Example 1:
dt = new_time(10, 30, 55) dt is 10:30:55 AM
See Also:
from_date, from_unix, now, new
8.4.5.8 weeks_day
include std/datetime.e namespace datetime public function weeks_day(datetime dt)
Get the day of week of the datetime dt.
Parameters:
- dt : a datetime to be queried.
Returns:
An integer, between 1 (Sunday) and 7 (Saturday).
Example 1:
d = new(2008, 5, 2, 0, 0, 0) day = weeks_day(d) -- day is 6 because May 2, 2008 is a Friday.
8.4.5.9 years_day
include std/datetime.e namespace datetime public function years_day(datetime dt)
Get the Julian day of year of the supplied date.
Parameters:
- dt : a datetime to be queried.
Returns:
An integer, between 1 and 366.
Comments:
For dates earlier than 1800, this routine may give inaccurate results if the date applies to a country other than United Kingdom or a former colony thereof. The change from Julian to Gregorian calendar took place much earlier in some other European countries.
Example 1:
d = new(2008, 5, 2, 0, 0, 0) day = years_day(d) -- day is 123
8.4.5.10 is_leap_year
include std/datetime.e namespace datetime public function is_leap_year(datetime dt)
Determine if dt falls within leap year.
Parameters:
- dt : a datetime to be queried.
Returns:
An integer, of 1 if leap year, otherwise 0.
Example 1:
d = new(2008, 1, 1, 0, 0, 0) ? is_leap_year(d) -- prints 1 d = new(2005, 1, 1, 0, 0, 0) ? is_leap_year(d) -- prints 0
See Also:
8.4.5.11 days_in_month
include std/datetime.e namespace datetime public function days_in_month(datetime dt)
Return the number of days in the month of dt.
This takes into account leap year.
Parameters:
- dt : a datetime to be queried.
Example 1:
d = new(2008, 1, 1, 0, 0, 0) ? days_in_month(d) -- 31 d = new(2008, 2, 1, 0, 0, 0) -- Leap year ? days_in_month(d) -- 29
See Also:
8.4.5.12 days_in_year
include std/datetime.e namespace datetime public function days_in_year(datetime dt)
Return the number of days in the year of dt.
This takes into account leap year.
Parameters:
- dt : a datetime to be queried.
Example 1:
d = new(2007, 1, 1, 0, 0, 0) ? days_in_year(d) -- 365 d = new(2008, 1, 1, 0, 0, 0) -- leap year ? days_in_year(d) -- 366
See Also:
8.4.5.13 to_unix
include std/datetime.e namespace datetime public function to_unix(datetime dt)
Convert a datetime value to the unix numeric format (seconds since EPOCH_1970)
Parameters:
- dt : a datetime to be queried.
Returns:
An atom, so this will not overflow during the winter 2038-2039.
Example 1:
secs_since_epoch = to_unix(now()) -- secs_since_epoch is equal to the current seconds since epoch
See Also:
8.4.5.14 from_unix
include std/datetime.e namespace datetime public function from_unix(atom unix)
Create a datetime value from the unix numeric format (seconds since EPOCH)
Parameters:
- unix : an atom, counting seconds elapsed since EPOCH.
Returns:
A sequence, more precisely a datetime representing the same moment in time.
Example 1:
d = from_unix(0) -- d is 1970-01-01 00:00:00 (zero seconds since EPOCH)
See Also:
8.4.5.15 format
include std/datetime.e namespace datetime public function format(datetime d, sequence pattern = "%Y-%m-%d %H:%M:%S")
Format the date according to the format pattern string
Parameters:
- d : a datetime which is to be printed out
- pattern : a format string, similar to the ones sprintf() uses, but with some Unicode encoding. The default is "%Y-%m-%d %H:%M:%S".
Returns:
A string, with the date d formatted according to the specification in pattern.
Comments:
Pattern string can include the following specifiers:
- %% -- a literal %
- %a -- locale's abbreviated weekday name (e.g., Sun)
- %A -- locale's full weekday name (e.g., Sunday)
- %b -- locale's abbreviated month name (e.g., Jan)
- %B -- locale's full month name (e.g., January)
- %C -- century; like %Y, except omit last two digits (e.g., 21)
- %d -- day of month (e.g, 01)
- %H -- hour (00..23)
- %I -- hour (01..12)
- %j -- day of year (001..366)
- %k -- hour ( 0..23)
- %l -- hour ( 1..12)
- %m -- month (01..12)
- %M -- minute (00..59)
- %p -- locale's equivalent of either AM or PM; blank if not known
- %P -- like %p, but lower case
- %s -- seconds since 1970-01-01 00:00:00 UTC
- %S -- second (00..60)
- %u -- day of week (1..7); 1 is Monday
- %w -- day of week (0..6); 0 is Sunday
- %y -- last two digits of year (00..99)
- %Y -- year
Example 1:
d = new(2008, 5, 2, 12, 58, 32) s = format(d, "%Y-%m-%d %H:%M:%S") -- s is "2008-05-02 12:58:32"
Example 2:
d = new(2008, 5, 2, 12, 58, 32) s = format(d, "%A, %B %d '%y %H:%M%p") -- s is "Friday, May 2 '08 12:58PM"
See Also:
8.4.5.16 parse
include std/datetime.e namespace datetime public function parse(sequence val, sequence fmt = "%Y-%m-%d %H:%M:%S", integer yylower = - 80)
Parse a datetime string according to the given format.
Parameters:
- val : string datetime value
- fmt : datetime format. Default is "%Y-%m-%d %H:%M:%S"
- yysplit : Set the maximum difference from the current year when parsing a two digit year. Defaults to -80/+20.
Returns:
A datetime, value.
Comments:
Only a subset of the format specification is currently supported:
- %d -- day of month (e.g, 01)
- %H -- hour (00..23)
- %m -- month (01..12)
- %M -- minute (00..59)
- %S -- second (00..60)
- %y -- 2-digit year (YY)
- %Y -- 4-digit year (CCYY)
More format codes will be added in future versions.
All non-format characters in the format string are ignored and are not matched against the input string.
All non-digits in the input string are ignored.
Parsing Two Digit Years:
When parsing a two digit year parse has to make a decision if a given year is in the past or future. For example, 10/18/44. Is that Oct 18, 1944 or Oct 18, 2044. A common rule has come about for this purpose and that is the -80/+20 rule. Based on research it was found that more historical events are recorded than future events, thus it favors history rather than future. Some other applications may require a different rule, thus the yylower parameter can be supplied.
Assuming today is 12/22/2010 here is an example of the -80/+20 rule
YY | Diff | CCYY |
---|---|---|
18 | -92/+8 | 2018 |
95 | -15/+85 | 1995 |
33 | -77/+23 | 1933 |
29 | -81/+19 | 2029 |
Another rule in use is the -50/+50 rule. Therefore, if you supply -50 to the yylower to set the lower bounds, some examples may be (given that today is 12/22/2010)
YY | Diff | CCYY |
---|---|---|
18 | -92/+8 | 2018 |
95 | -15/+85 | 1995 |
33 | -77/+23 | 2033 |
29 | -81/+19 | 2029 |
Example 1:
datetime d = parse("05/01/2009 10:20:30", "%m/%d/%Y %H:%M:%S") -- d is { 2009, 5, 1, 10, 20, 30 }
Example 2:
datetime d = parse("05/01/44", "%m/%d/%y", -50) -- -50/+50 rule -- d is { 2044, 5, 14, 0, 0, 0 }
Versioning:
- Since 4.0.1 - 2-digit year parsing and yylower parameter
See Also:
8.4.5.17 add
include std/datetime.e namespace datetime public function add(datetime dt, object qty, integer interval)
Add a number of intervals to a datetime.
Parameters:
- dt : the base datetime
- qty : the number of intervals to add. It should be positive.
- interval : which kind of interval to add.
Returns:
A sequence, more precisely a datetime representing the new moment in time.
Comments:
Please see Constants for Date/Time for a reference of valid intervals.
Do not confuse the item access constants such as YEAR, MONTH, DAY, etc... with the interval constants YEARS, MONTHS, DAYS, etc...
When adding MONTHS, it is a calendar based addition. For instance, a date of 5/2/2008 with 5 MONTHS added will become 10/2/2008. MONTHS does not compute the number of days per each month and the average number of days per month.
When adding YEARS, leap year is taken into account. Adding 4 YEARS to a date may result in a different day of month number due to leap year.
Example 1:
d2 = add(d1, 35, SECONDS) -- add 35 seconds to d1 d2 = add(d1, 7, WEEKS) -- add 7 weeks to d1 d2 = add(d1, 19, YEARS) -- add 19 years to d1
See Also:
8.4.5.18 subtract
include std/datetime.e namespace datetime public function subtract(datetime dt, atom qty, integer interval)
Subtract a number of intervals to a base datetime.
Parameters:
- dt : the base datetime
- qty : the number of intervals to subtract. It should be positive.
- interval : which kind of interval to subtract.
Returns:
A sequence, more precisely a datetime representing the new moment in time.
Comments:
Please see Constants for Date/Time for a reference of valid intervals.
See the function add() for more information on adding and subtracting date intervals
Example 1:
dt2 = subtract(dt1, 18, MINUTES) -- subtract 18 minutes from dt1 dt2 = subtract(dt1, 7, MONTHS) -- subtract 7 months from dt1 dt2 = subtract(dt1, 12, HOURS) -- subtract 12 hours from dt1
See Also:
8.4.5.19 diff
include std/datetime.e namespace datetime public function diff(datetime dt1, datetime dt2)
Compute the difference, in seconds, between two dates.
Parameters:
- dt1 : the end datetime
- dt2 : the start datetime
Returns:
An atom, the number of seconds elapsed from dt2 to dt1.
Comments:
dt2 is subtracted from dt1, therefore, you can come up with a negative value.
Example 1:
d1 = now() sleep(15) -- sleep for 15 seconds d2 = now() i = diff(d1, d2) -- i is 15
See Also:
Up | TOC | Index | |||||
<< 7 Included Tools | < 8.3 Console | Up: 8 API Reference | 8.5 File System > | 9 Release Notes >> |