1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add RDoc comments for Time

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
dave 2003-12-27 06:33:45 +00:00
parent d89650c8cf
commit 56a0049312
2 changed files with 485 additions and 0 deletions

View file

@ -1,3 +1,7 @@
Sat Dec 27 15:32:40 2003 Dave Thomas <dave@wireless_3.local.thomases.com>
* time.c: Add RDoc comments for Time class.
Sat Dec 27 15:07:26 2003 Dave Thomas <dave@pragprog.com>
* object.c: Add RDoc comments for Symbol class.

481
time.c
View file

@ -66,6 +66,23 @@ time_modify(time)
rb_raise(rb_eSecurityError, "Insecure: can't modify Time");
}
/*
* call-seq:
* Time.new -> time
*
* Returns a <code>Time</code> object initialized to the current system
* time. <b>Note:</b> The object created will be created using the
* resolution available on your system clock, and so may include
* fractional seconds.
*
* a = Time.new #=> Wed Apr 09 08:56:03 CDT 2003
* b = Time.new #=> Wed Apr 09 08:56:03 CDT 2003
* a == b #=> false
* "%.6f" % a.to_f #=> "1049896563.230740"
* "%.6f" % b.to_f #=> "1049896563.231466"
*
*/
static VALUE
time_init(time)
VALUE time;
@ -210,6 +227,21 @@ rb_time_timeval(time)
return time_timeval(time, Qfalse);
}
/*
* call-seq:
* Time.at( aTime ) => time
* Time.at( seconds [, microseconds] ) => time
*
* Creates a new time object with the value given by <i>aTime</i>, or
* the given number of <i>seconds</i> (and optional
* <i>microseconds</i>) from epoch. A non-portable feature allows the
* offset to be negative on some systems.
*
* Time.at(0) #=> Wed Dec 31 18:00:00 CST 1969
* Time.at(946702800) #=> Fri Dec 31 23:00:00 CST 1999
* Time.at(-284061600) #=> Sat Dec 31 00:00:00 CST 1960
*/
static VALUE
time_s_at(argc, argv, klass)
int argc;
@ -673,6 +705,27 @@ time_utc_or_local(argc, argv, utc_p, klass)
return time_localtime(time);
}
/*
* call-seq:
* Time.utc( year [, month, day, hour, min, sec, usec] ) => time
* Time.utc( sec, min, hour, day, month, year, wday, yday, isdst, tz
* ) => time
* Time.gm( year [, month, day, hour, min, sec, usec] ) => time
* Time.gm( sec, min, hour, day, month, year, wday, yday, isdst, tz
* ) => time
*
* Creates a time based on given values, interpreted as UTC (GMT). The
* year must be specified. Other values default to the minimum value
* for that field (and may be <code>nil</code> or omitted). Months may
* be specified by numbers from 1 to 12, or by the three-letter English
* month names. Hours are specified on a 24-hour clock (0..23). Raises
* an <code>ArgumentError</code> if any values are out of range. Will
* also accept ten arguments in the order output by
* <code>Time#to_a</code>.
*
* Time.utc(2000,"jan",1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
* Time.gm(2000,"jan",1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
*/
static VALUE
time_s_mkutc(argc, argv, klass)
int argc;
@ -682,6 +735,19 @@ time_s_mkutc(argc, argv, klass)
return time_utc_or_local(argc, argv, Qtrue, klass);
}
/*
* call-seq:
* Time.local( year [, month, day, hour, min, sec, usec] ) => time
* Time.local( sec, min, hour, day, month, year, wday, yday, isdst,
* tz ) => time
* Time.mktime( year, month, day, hour, min, sec, usec ) => time
*
* Same as <code>Time::gm</code>, but interprets the values in the
* local time zone.
*
* Time.local(2000,"jan",1,20,15,1) #=> Sat Jan 01 20:15:01 CST 2000
*/
static VALUE
time_s_mktime(argc, argv, klass)
int argc;
@ -691,6 +757,19 @@ time_s_mktime(argc, argv, klass)
return time_utc_or_local(argc, argv, Qfalse, klass);
}
/*
* call-seq:
* time.to_i => int
* time.tv_sec => int
*
* Returns the value of <i>time</i> as an integer number of seconds
* since epoch.
*
* t = Time.now
* "%10.5f" % t.to_f #=> "1049896564.17839"
* t.to_i #=> 1049896564
*/
static VALUE
time_to_i(time)
VALUE time;
@ -701,6 +780,18 @@ time_to_i(time)
return LONG2NUM(tobj->tv.tv_sec);
}
/*
* call-seq:
* time.to_f => float
*
* Returns the value of <i>time</i> as a floating point number of
* seconds since epoch.
*
* t = Time.now
* "%10.5f" % t.to_f #=> "1049896564.13654"
* t.to_i #=> 1049896564
*/
static VALUE
time_to_f(time)
VALUE time;
@ -711,6 +802,18 @@ time_to_f(time)
return rb_float_new((double)tobj->tv.tv_sec+(double)tobj->tv.tv_usec/1e6);
}
/*
* call-seq:
* time.usec => int
* time.tv_usec => int
*
* Returns just the number of microseconds for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* "%10.6f" % t.to_f #=> "1049896564.259970"
* t.usec #=> 259970
*/
static VALUE
time_usec(time)
VALUE time;
@ -721,6 +824,22 @@ time_usec(time)
return LONG2NUM(tobj->tv.tv_usec);
}
/*
* call-seq:
* time <=> other_time => -1, 0, +1
* time <=> numeric => -1, 0, +1
*
* Comparison---Compares <i>time</i> with <i>other_time</i> or with
* <i>numeric</i>, which is the number of seconds (possibly
* fractional) since epoch.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t2 = t + 2592000 #=> Fri May 09 08:56:03 CDT 2003
* t <=> t2 #=> -1
* t2 <=> t #=> 1
* t <=> t #=> 0
*/
static VALUE
time_cmp(time1, time2)
VALUE time1, time2;
@ -742,6 +861,15 @@ time_cmp(time1, time2)
return Qnil;
}
/*
* call-seq:
* time.eql?(other_time)
*
* Return <code>true</code> if <i>time</i> and <i>other_time</i> are
* both <code>Time</code> objects with the same seconds and fractional
* seconds.
*/
static VALUE
time_eql(time1, time2)
VALUE time1, time2;
@ -758,6 +886,25 @@ time_eql(time1, time2)
return Qfalse;
}
/*
* call-seq:
* time.utc? => true or false
* time.gmt? => true or false
*
* Returns <code>true</code> if <i>time</i> represents a time in UTC
* (GMT).
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.utc? #=> false
* t = Time.gm(2000,"jan",1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
* t.utc? #=> true
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.gmt? #=> false
* t = Time.gm(2000,1,1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
* t.gmt? #=> true
*/
static VALUE
time_utc_p(time)
VALUE time;
@ -769,6 +916,13 @@ time_utc_p(time)
return Qfalse;
}
/*
* call-seq:
* time.hash => fixnum
*
* Return a hash code for this time object.
*/
static VALUE
time_hash(time)
VALUE time;
@ -808,6 +962,19 @@ time_dup(time)
return dup;
}
/*
* call-seq:
* time.localtime => time
*
* Converts <i>time</i> to local time (using the local time zone in
* effect for this process) modifying the receiver.
*
* t = Time.gm(2000, "jan", 1, 20, 15, 1)
* t.gmt? #=> true
* t.localtime #=> Sat Jan 01 14:15:01 CST 2000
* t.gmt? #=> false
*/
static VALUE
time_localtime(time)
VALUE time;
@ -834,6 +1001,24 @@ time_localtime(time)
return time;
}
/*
* call-seq:
* time.gmtime => time
* time.utc => time
*
* Converts <i>time</i> to UTC (GMT), modifying the receiver.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.gmt? #=> false
* t.gmtime #=> Wed Apr 09 13:56:03 UTC 2003
* t.gmt? #=> true
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.utc? #=> false
* t.utc #=> Wed Apr 09 13:56:04 UTC 2003
* t.utc? #=> true
*/
static VALUE
time_gmtime(time)
VALUE time;
@ -860,6 +1045,20 @@ time_gmtime(time)
return time;
}
/*
* call-seq:
* time.getlocal => new_time
*
* Returns a new <code>new_time</code> object representing <i>time</i> in
* local time (using the local time zone in effect for this process).
*
* t = Time.gm(2000,1,1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
* t.gmt? #=> true
* l = t.getlocal #=> Sat Jan 01 14:15:01 CST 2000
* l.gmt? #=> false
* t == l #=> true
*/
static VALUE
time_getlocaltime(time)
VALUE time;
@ -867,6 +1066,21 @@ time_getlocaltime(time)
return time_localtime(time_dup(time));
}
/*
* call-seq:
* time.getgm => new_time
* time.getutc => new_time
*
* Returns a new <code>new_time</code> object representing <i>time</i> in
* UTC.
*
* t = Time.local(2000,1,1,20,15,1) #=> Sat Jan 01 20:15:01 CST 2000
* t.gmt? #=> false
* y = t.getgm #=> Sun Jan 02 02:15:01 UTC 2000
* y.gmt? #=> true
* t == y #=> true
*/
static VALUE
time_getgmtime(time)
VALUE time;
@ -883,6 +1097,16 @@ time_get_tm(time, gmt)
return time_localtime(time);
}
/*
* call-seq:
* time.asctime => string
* time.ctime => string
*
* Returns a canonical string representation of <i>time</i>.
*
* Time.now.asctime #=> "Wed Apr 9 08:56:03 2003"
*/
static VALUE
time_asctime(time)
VALUE time;
@ -900,6 +1124,19 @@ time_asctime(time)
return rb_str_new2(s);
}
/*
* call-seq:
* time.inspect => string
* time.to_s => string
*
* Returns a string representing <i>time</i>. Equivalent to calling
* <code>Time#strftime</code> with a format string of ``<code>%a</code>
* <code>%b</code> <code>%d</code> <code>%H:%M:%S</code>
* <code>%Z</code> <code>%Y</code>''.
*
* Time.now.to_s #=> "Wed Apr 09 08:56:04 CDT 2003"
*/
static VALUE
time_to_s(time)
VALUE time;
@ -921,6 +1158,17 @@ time_to_s(time)
return rb_str_new(buf, len);
}
/*
* call-seq:
* time + numeric => time
*
* Addition---Adds some number of seconds (possibly fractional) to
* <i>time</i> and returns that value as a new time.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t + (60 * 60 * 24) #=> Thu Apr 10 08:56:03 CDT 2003
*/
static VALUE
time_plus(time1, time2)
VALUE time1, time2;
@ -962,6 +1210,21 @@ time_plus(time1, time2)
return time2;
}
/*
* call-seq:
* time - other_time => float
* time - numeric => time
*
* Difference---Returns a new time that represents the difference
* between two times, or subtracts the given number of seconds in
* <i>numeric</i> from <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t2 = t + 2592000 #=> Fri May 09 08:56:03 CDT 2003
* t2 - t #=> 2592000.0
* t2 - 2592000 #=> Wed Apr 09 08:56:03 CDT 2003
*/
static VALUE
time_minus(time1, time2)
VALUE time1, time2;
@ -1009,6 +1272,13 @@ time_minus(time1, time2)
return time2;
}
/*
* call-seq:
* time.succ => new_time
*
* Return a new time object, one second later than <code>time</code>.
*/
static VALUE
time_succ(time)
VALUE time;
@ -1019,6 +1289,19 @@ time_succ(time)
return rb_time_new(tobj->tv.tv_sec + 1, tobj->tv.tv_usec);
}
/*
* call-seq:
* time.sec => fixnum
*
* Returns the second of the minute (0..60)<em>[Yes, seconds really can
* range from zero to 60. This allows the system to inject leap seconds
* every now and then to correct for the fact that years are not really
* a convenient number of hours long.]</em> for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.sec #=> 4
*/
static VALUE
time_sec(time)
VALUE time;
@ -1032,6 +1315,16 @@ time_sec(time)
return INT2FIX(tobj->tm.tm_sec);
}
/*
* call-seq:
* time.min => fixnum
*
* Returns the minute of the hour (0..59) for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.min #=> 56
*/
static VALUE
time_min(time)
VALUE time;
@ -1045,6 +1338,16 @@ time_min(time)
return INT2FIX(tobj->tm.tm_min);
}
/*
* call-seq:
* time.hour => fixnum
*
* Returns the hour of the day (0..23) for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.hour #=> 8
*/
static VALUE
time_hour(time)
VALUE time;
@ -1058,6 +1361,18 @@ time_hour(time)
return INT2FIX(tobj->tm.tm_hour);
}
/*
* call-seq:
* time.day => fixnum
* time.mday => fixnum
*
* Returns the day of the month (1..n) for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.day #=> 9
* t.mday #=> 9
*/
static VALUE
time_mday(time)
VALUE time;
@ -1071,6 +1386,18 @@ time_mday(time)
return INT2FIX(tobj->tm.tm_mday);
}
/*
* call-seq:
* time.mon => fixnum
* time.month => fixnum
*
* Returns the month of the year (1..12) for <i>time</i>.
*
* t = Time.now #=> Wed Apr 09 08:56:03 CDT 2003
* t.mon #=> 4
* t.month #=> 4
*/
static VALUE
time_mon(time)
VALUE time;
@ -1084,6 +1411,16 @@ time_mon(time)
return INT2FIX(tobj->tm.tm_mon+1);
}
/*
* call-seq:
* time.year => fixnum
*
* Returns the year for <i>time</i> (including the century).
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.year #=> 2003
*/
static VALUE
time_year(time)
VALUE time;
@ -1097,6 +1434,17 @@ time_year(time)
return LONG2NUM((long)tobj->tm.tm_year+1900);
}
/*
* call-seq:
* time.wday => fixnum
*
* Returns an integer representing the day of the week, 0..6, with
* Sunday == 0.
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.wday #=> 3
*/
static VALUE
time_wday(time)
VALUE time;
@ -1110,6 +1458,16 @@ time_wday(time)
return INT2FIX(tobj->tm.tm_wday);
}
/*
* call-seq:
* time.yday => fixnum
*
* Returns an integer representing the day of the year, 1..366.
*
* t = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t.yday #=> 99
*/
static VALUE
time_yday(time)
VALUE time;
@ -1123,6 +1481,20 @@ time_yday(time)
return INT2FIX(tobj->tm.tm_yday+1);
}
/*
* call-seq:
* time.isdst => true or false
* time.dst? => true or false
*
* Returns <code>true</code> if <i>time</i> occurs during Daylight
* Saving Time in its time zone.
*
* Time.local(2000, 7, 1).isdst #=> true
* Time.local(2000, 1, 1).isdst #=> false
* Time.local(2000, 7, 1).dst? #=> true
* Time.local(2000, 1, 1).dst? #=> false
*/
static VALUE
time_isdst(time)
VALUE time;
@ -1136,6 +1508,19 @@ time_isdst(time)
return tobj->tm.tm_isdst?Qtrue:Qfalse;
}
/*
* call-seq:
* time.zone => string
*
* Returns the name of the time zone used for <i>time</i>. As of Ruby
* 1.8, returns ``UTC'' rather than ``GMT'' for UTC times.
*
* t = Time.gm(2000, "jan", 1, 20, 15, 1)
* t.zone #=> "UTC"
* t = Time.local(2000, "jan", 1, 20, 15, 1)
* t.zone #=> "CST"
*/
static VALUE
time_zone(time)
VALUE time;
@ -1164,6 +1549,21 @@ time_zone(time)
#endif
}
/*
* call-seq:
* time.gmt_offset => fixnum
* time.gmtoff => fixnum
* time.utc_offset => fixnum
*
* Returns the offset in seconds between the timezone of <i>time</i>
* and UTC.
*
* t = Time.gm(2000,1,1,20,15,1) #=> Sat Jan 01 20:15:01 UTC 2000
* t.gmt_offset #=> 0
* l = t.getlocal #=> Sat Jan 01 14:15:01 CST 2000
* l.gmt_offset #=> -21600
*/
static VALUE
time_utc_offset(time)
VALUE time;
@ -1206,6 +1606,21 @@ time_utc_offset(time)
}
}
/*
* call-seq:
* time.to_a => array
*
* Returns a ten-element <i>array</i> of values for <i>time</i>:
* {<code>[ sec, min, hour, day, month, year, wday, yday, isdst, zone
* ]</code>}. See the individual methods for an explanation of the
* valid ranges of each value. The ten elements can be passed directly
* to <code>Time::utc</code> or <code>Time::local</code> to create a
* new <code>Time</code>.
*
* now = Time.now #=> Wed Apr 09 08:56:04 CDT 2003
* t = now.to_a #=> [4, 56, 8, 9, 4, 2003, 3, 99, true, "CDT"]
*/
static VALUE
time_to_a(time)
VALUE time;
@ -1263,6 +1678,47 @@ rb_strftime(buf, format, time)
/* not reached */
}
/*
* call-seq:
* time.strftime( string ) => string
*
* Formats <i>time</i> according to the directives in the given format
* string. Any text not listed as a directive will be passed through
* to the output string.
*
* Format meaning:
* %a - The abbreviated weekday name (``Sun'')
* %A - The full weekday name (``Sunday'')
* %b - The abbreviated month name (``Jan'')
* %B - The full month name (``January'')
* %c - The preferred local date and time representation
* %d - Day of the month (01..31)
* %H - Hour of the day, 24-hour clock (00..23)
* %I - Hour of the day, 12-hour clock (01..12)
* %j - Day of the year (001..366)
* %m - Month of the year (01..12)
* %M - Minute of the hour (00..59)
* %p - Meridian indicator (``AM'' or ``PM'')
* %S - Second of the minute (00..60)
* %U - Week number of the current year,
* starting with the first Sunday as the first
* day of the first week (00..53)
* %W - Week number of the current year,
* starting with the first Monday as the first
* day of the first week (00..53)
* %w - Day of the week (Sunday is 0, 0..6)
* %x - Preferred representation for the date alone, no time
* %X - Preferred representation for the time alone, no date
* %y - Year without a century (00..99)
* %Y - Year with century
* %Z - Time zone name
* %% - Literal ``%'' character
*
* t = Time.now
* t.strftime("Printed on %m/%d/%Y") #=> "Printed on 04/09/2003"
* t.strftime("at %I:%M%p") #=> "at 08:56AM"
*/
static VALUE
time_strftime(time, format)
VALUE time, format;
@ -1309,6 +1765,13 @@ time_strftime(time, format)
return str;
}
/*
* call-seq:
* Time.times => struct_tms
*
* Deprecated in favor of <code>Process::times</code>
*/
static VALUE
time_s_times(obj)
VALUE obj;
@ -1441,6 +1904,24 @@ time_load(klass, str)
return time;
}
/*
* <code>Time</code> is an abstraction of dates and times. Time is
* stored internally as the number of seconds and microseconds since
* the <em>epoch</em>, January 1, 1970 00:00 UTC. On some operating
* systems, this offset is allowed to be negative. Also see the
* library modules <code>Date</code> and <code>ParseDate</code>. The
* <code>Time</code> class treats GMT (Greenwich Mean Time) and UTC
* (Coordinated Universal Time)<em>[Yes, UTC really does stand for
* Coordinated Universal Time. There was a committee involved.]</em>
* as equivalent. GMT is the older way of referring to these
* baseline times but persists in the names of calls on Posix
* systems.
*
* All times are stored with some number of microseconds. Be aware of
* this fact when comparing times with each other---times that are
* apparently equal when displayed may be different when compared.
*/
void
Init_Time()
{