Project

General

Profile

Bug #7326 » time_patch0002.diff

bt (Bernd Homuth), 11/24/2012 07:38 PM

View differences:

time.c
/*
* Document-method: now
*
* Synonym for <code>Time.new</code>. Returns a +Time+ object
* Alias for Time::new. Returns a Time object
* initialized to the current system time.
*/
......
* Time.new -> time
* Time.new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) -> time
*
* Returns a <code>Time</code> object.
* Returns a Time object.
*
* It is initialized to the current system time if no argument.
* <b>Note:</b> The object created will be created using the
......
* Time.at(seconds_with_frac) -> time
* Time.at(seconds, microseconds_with_frac) -> time
*
* Creates a new time object with the value given by <i>time</i>,
* the given number of <i>seconds_with_frac</i>, or
* <i>seconds</i> and <i>microseconds_with_frac</i> from the Epoch.
* <i>seconds_with_frac</i> and <i>microseconds_with_frac</i>
* can be Integer, Float, Rational, or other Numeric.
* Creates a new Time object with the value given by +time+,
* the given number of +seconds_with_frac+, or
* +seconds+ and +microseconds_with_frac+ since the Epoch.
* +seconds_with_frac+ and +microseconds_with_frac+
* can be integer, Float, Rational, or other Numeric.
* non-portable feature allows the offset to be negative on some systems.
*
* If a numeric argument is given, the result is in local time.
*
* Time.at(0) #=> 1969-12-31 18:00:00 -0600
* Time.at(Time.at(0)) #=> 1969-12-31 18:00:00 -0600
* Time.at(946702800) #=> 1999-12-31 23:00:00 -0600
* Time.at(-284061600) #=> 1960-12-31 00:00:00 -0600
* Time.at(946684800.2).usec #=> 200000
* Time.at(946684800, 123456.789).nsec #=> 123456789
* Time.at(0) #=> 1969-12-31 18:00:00 -0600
* Time.at(Time.at(0)) #=> 1969-12-31 18:00:00 -0600
* Time.at(946702800) #=> 1999-12-31 23:00:00 -0600
* Time.at(-284061600) #=> 1960-12-31 00:00:00 -0600
* Time.at(946684800.2).usec #=> 200000
* Time.at(946684800, 123456.789).nsec #=> 123456789
*/
static VALUE
......
*
* 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
* for that field (and may be +nil+ 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>.
* <i>sec_with_frac</i> and <i>usec_with_frac</i> can have a fractional part.
* an ArgumentError if any values are out of range. Will
* also accept ten arguments in the order output by Time#to_a.
*
* +sec_with_frac+ and +usec_with_frac+ can have a fractional part.
*
* Time.utc(2000,"jan",1,20,15,1) #=> 2000-01-01 20:15:01 UTC
* Time.gm(2000,"jan",1,20,15,1) #=> 2000-01-01 20:15:01 UTC
......
* Time.mktime(year, month, day, hour, min, sec, usec_with_frac) -> time
* Time.mktime(sec, min, hour, day, month, year, wday, yday, isdst, tz) -> time
*
* Same as <code>Time::gm</code>, but interprets the values in the
* Same as Time::gm, but interprets the values in the
* local time zone.
*
* Time.local(2000,"jan",1,20,15,1) #=> 2000-01-01 20:15:01 -0600
......
* time.to_i -> int
* time.tv_sec -> int
*
* Returns the value of <i>time</i> as an integer number of seconds
* Returns the value of _time_ as an integer number of seconds
* since the Epoch.
*
* t = Time.now
......
* call-seq:
* time.to_f -> float
*
* Returns the value of <i>time</i> as a floating point number of
* Returns the value of _time_ as a floating point number of
* seconds since the Epoch.
*
* t = Time.now
......
* call-seq:
* time.to_r -> a_rational
*
* Returns the value of <i>time</i> as a rational number of seconds
* Returns the value of _time_ as a rational number of seconds
* since the Epoch.
*
* t = Time.now
* p t.to_r #=> (1270968792716287611/1000000000)
*
* This methods is intended to be used to get an accurate value
* representing nanoseconds from the Epoch. You can use this
* to convert time to another Epoch.
* representing the nanoseconds since the Epoch. You can use this method
* to convert _time_ to another Epoch.
*/
static VALUE
......
* time.usec -> int
* time.tv_usec -> int
*
* Returns just the number of microseconds for <i>time</i>.
* Returns the number of microseconds for _time_.
*
* t = Time.now #=> 2007-11-19 08:03:26 -0600
* "%10.6f" % t.to_f #=> "1195481006.775195"
......
* time.nsec -> int
* time.tv_nsec -> int
*
* Returns just the number of nanoseconds for <i>time</i>.
* Returns the number of nanoseconds for _time_.
*
* t = Time.now #=> 2007-11-17 15:18:03 +0900
* "%10.9f" % t.to_f #=> "1195280283.536151409"
* t.nsec #=> 536151406
*
* The lowest digit of to_f and nsec is different because
* The lowest digits of #to_f and #nsec are different because
* IEEE 754 double is not accurate enough to represent
* nanoseconds from the Epoch.
* The accurate value is returned by nsec.
......
* call-seq:
* time.subsec -> number
*
* Returns just the fraction for <i>time</i>.
* Returns the fraction for _time_.
*
* The result is possibly rational.
*
......
* "%10.9f" % t.to_f #=> "1238074392.940563917"
* t.subsec #=> (94056401/100000000)
*
* The lowest digit of to_f and subsec is different because
* The lowest digits of #to_f and #subsec are different because
* IEEE 754 double is not accurate enough to represent
* the rational.
* The accurate value is returned by subsec.
......
* 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.
* Returns +true+ if _time_ and +other_time+ are
* both Time objects with the same seconds and fractional seconds.
*/
static VALUE
......
* time.utc? -> true or false
* time.gmt? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents a time in UTC
* (GMT).
* Returns +true+ if _time_ represents a time in UTC (GMT).
*
* t = Time.now #=> 2007-11-19 08:15:23 -0600
* t.utc? #=> false
......
* call-seq:
* time.hash -> fixnum
*
* Return a hash code for this time object.
* Returns a hash code for this Time object.
*/
static VALUE
......
* time.localtime -> time
* time.localtime(utc_offset) -> time
*
* Converts <i>time</i> to local time (using the local time zone in
* Converts _time_ to local time (using the local time zone in
* effect for this process) modifying the receiver.
*
* If _utc_offset_ is given, it is used instead of the local time.
......
* time.gmtime -> time
* time.utc -> time
*
* Converts <i>time</i> to UTC (GMT), modifying the receiver.
* Converts _time_ to UTC (GMT), modifying the receiver.
*
* t = Time.now #=> 2007-11-19 08:18:31 -0600
* t.gmt? #=> false
......
* time.getlocal -> new_time
* time.getlocal(utc_offset) -> new_time
*
* Returns a new <code>new_time</code> object representing <i>time</i> in
* Returns a new Time object representing _time_ in
* local time (using the local time zone in effect for this process).
*
* If _utc_offset_ is given, it is used instead of the local time.
......
* time.getgm -> new_time
* time.getutc -> new_time
*
* Returns a new <code>new_time</code> object representing <i>time</i> in
* UTC.
* Returns a new Time object representing _time_ in UTC.
*
* t = Time.local(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 -0600
* t.gmt? #=> false
......
* time.asctime -> string
* time.ctime -> string
*
* Returns a canonical string representation of <i>time</i>.
* Returns a canonical string representation of _time_.
*
* Time.now.asctime #=> "Wed Apr 9 08:56:03 2003"
*/
......
* time + numeric -> time
*
* Addition---Adds some number of seconds (possibly fractional) to
* <i>time</i> and returns that value as a new time.
* _time_ and returns that value as a new Time object.
*
* t = Time.now #=> 2007-11-19 08:22:21 -0600
* t + (60 * 60 * 24) #=> 2007-11-20 08:22:21 -0600
......
* call-seq:
* time.succ -> new_time
*
* Return a new time object, one second later than <code>time</code>.
* Returns a new Time object, one second later than _time_.
* Time#succ is obsolete since 1.9.2 for time is not a discrete value.
*
* t = Time.now #=> 2007-11-19 08:23:57 -0600
......
* time.round([ndigits]) -> new_time
*
* Rounds sub seconds to a given precision in decimal digits (0 digits by default).
* It returns a new time object.
* It returns a new Time object.
* _ndigits_ should be zero or positive integer.
*
* require 'time'
......
* call-seq:
* time.sec -> fixnum
*
* Returns the second of the minute (0..60) for <i>time</i>.
* Returns the second of the minute (0..60) for _time_.
*
* <em>[Yes, seconds range from zero to 60. This allows the system to inject
* leap seconds. See http://en.wikipedia.org/wiki/Leap_second for further
......
* call-seq:
* time.min -> fixnum
*
* Returns the minute of the hour (0..59) for <i>time</i>.
* Returns the minute of the hour (0..59) for _time_.
*
* t = Time.now #=> 2007-11-19 08:25:51 -0600
* t.min #=> 25
......
* call-seq:
* time.hour -> fixnum
*
* Returns the hour of the day (0..23) for <i>time</i>.
* Returns the hour of the day (0..23) for _time_.
*
* t = Time.now #=> 2007-11-19 08:26:20 -0600
* t.hour #=> 8
......
* time.day -> fixnum
* time.mday -> fixnum
*
* Returns the day of the month (1..n) for <i>time</i>.
* Returns the day of the month (1..n) for _time_.
*
* t = Time.now #=> 2007-11-19 08:27:03 -0600
* t.day #=> 19
......
* time.mon -> fixnum
* time.month -> fixnum
*
* Returns the month of the year (1..12) for <i>time</i>.
* Returns the month of the year (1..12) for _time_.
*
* t = Time.now #=> 2007-11-19 08:27:30 -0600
* t.mon #=> 11
......
* call-seq:
* time.year -> fixnum
*
* Returns the year for <i>time</i> (including the century).
* Returns the year for _time_ (including the century).
*
* t = Time.now #=> 2007-11-19 08:27:51 -0600
* t.year #=> 2007
......
* call-seq:
* time.sunday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Sunday.
* Returns +true+ if _time_ represents Sunday.
*
* t = Time.local(1990, 4, 1) #=> 1990-04-01 00:00:00 -0600
* t.sunday? #=> true
......
* call-seq:
* time.monday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Monday.
* Returns +true+ if _time_ represents Monday.
*
* t = Time.local(2003, 8, 4) #=> 2003-08-04 00:00:00 -0500
* p t.monday? #=> true
......
* call-seq:
* time.tuesday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Tuesday.
* Returns +true+ if _time_ represents Tuesday.
*
* t = Time.local(1991, 2, 19) #=> 1991-02-19 00:00:00 -0600
* p t.tuesday? #=> true
......
* call-seq:
* time.wednesday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Wednesday.
* Returns +true+ if _time_ represents Wednesday.
*
* t = Time.local(1993, 2, 24) #=> 1993-02-24 00:00:00 -0600
* p t.wednesday? #=> true
......
* call-seq:
* time.thursday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Thursday.
* Returns +true+ if _time_ represents Thursday.
*
* t = Time.local(1995, 12, 21) #=> 1995-12-21 00:00:00 -0600
* p t.thursday? #=> true
......
* call-seq:
* time.friday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Friday.
* Returns +true+ if _time_ represents Friday.
*
* t = Time.local(1987, 12, 18) #=> 1987-12-18 00:00:00 -0600
* t.friday? #=> true
......
* call-seq:
* time.saturday? -> true or false
*
* Returns <code>true</code> if <i>time</i> represents Saturday.
* Returns +true+ if _time_ represents Saturday.
*
* t = Time.local(2006, 6, 10) #=> 2006-06-10 00:00:00 -0500
* t.saturday? #=> true
......
* time.isdst -> true or false
* time.dst? -> true or false
*
* Returns <code>true</code> if <i>time</i> occurs during Daylight
* Returns +true+ if _time_ occurs during Daylight
* Saving Time in its time zone.
*
* # CST6CDT:
......
* call-seq:
* time.zone -> string
*
* Returns the name of the time zone used for <i>time</i>. As of Ruby
* Returns the name of the time zone used for _time_. As of Ruby
* 1.8, returns ``UTC'' rather than ``GMT'' for UTC times.
*
* t = Time.gm(2000, "jan", 1, 20, 15, 1)
......
* time.gmtoff -> fixnum
* time.utc_offset -> fixnum
*
* Returns the offset in seconds between the timezone of <i>time</i>
* Returns the offset in seconds between the timezone of _time_
* and UTC.
*
* t = Time.gm(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 UTC
......
* 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
* Returns a ten-element _array_ of values for _time_:
*
* [sec, min, hour, day, month, year, wday, yday, isdst, zone]
*
* 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>.
* to Time::utc or Time::local to create a
* new Time object.
*
* t = Time.now #=> 2007-11-19 08:36:01 -0600
* now = t.to_a #=> [1, 36, 8, 19, 11, 2007, 1, 323, false, "CST"]
......
* call-seq:
* time.strftime( string ) -> string
*
* Formats <i>time</i> according to the directives in the given format
* string.
* The directives begins with a percent (%) character.
* Formats _time_ according to the directives in the given format string.
*
* The directives begin with a percent (%) character.
* Any text not listed as a directive will be passed through to the
* output string.
*
* The directive consists of a percent (%) character,
* zero or more flags, optional minimum field width,
* optional modifier and a conversion specifier
* as follows.
* as follows:
*
* %<flags><width><modifier><conversion>
*
* Flags:
* - don't pad a numerical output.
* _ use spaces for padding.
* 0 use zeros for padding.
* ^ upcase the result string.
* # change case.
* : use colons for %z.
* - don't pad a numerical output
* _ use spaces for padding
* 0 use zeros for padding
* ^ upcase the result string
* # change case
* : use colons for %z
*
* The minimum field width specifies the minimum width.
*
* The modifier is "E" and "O".
* The modifiers are "E" and "O".
* They are ignored.
*
* Format directives:
......
* call-seq:
* Time._load(string) -> time
*
* Unmarshal a dumped +Time+ object.
* Unmarshal a dumped Time object.
*/
static VALUE
......
* with each other -- times that are apparently equal when displayed may be
* different when compared.
*
* Since Ruby 1.9.2, Time implementation uses a signed 63 bit integer, Bignum or Rational.
* Since Ruby 1.9.2, Time implementation uses a signed 63 bit integer,
* Bignum or Rational.
* The integer is a number of nanoseconds since the _Epoch_ which can
* represent 1823-11-12 to 2116-02-20.
* When Bignum or Rational is used (before 1823, after 2116, under nanosecond),
......
*
* == Creating a new Time instance
*
* You can create a new instance of time with Time.new. This will use the
* current system time. Time.now is a synonym for this. You can also
* pass parts of the time to Time.new such as year, month, minute, etc. When
* You can create a new instance of Time with Time::new. This will use the
* current system time. Time::now is an alias for this. You can also
* pass parts of the time to Time::new such as year, month, minute, etc. When
* you want to construct a time this way you must pass at least a year. If you
* pass the year with nothing else time with default to January 1 of that year
* at 00:00:00 with the current system timezone. Here are some examples:
......
* You can also use #gm, #local and #utc to infer GMT, local and UTC
* timezones instead of using the current system setting.
*
* You can also create a new time using Time.at which takes the number of
* You can also create a new time using Time::at which takes the number of
* seconds (or fraction of seconds) since the {Unix
* Epoch}[http://en.wikipedia.org/wiki/Unix_time].
*
......
*
* == Working with an instance of Time
*
* Once you have an instance of time there is a multitude of things you can do
* with it. Below are some examples. For all of the following examples, we
* Once you have an instance of Time there is a multitude of things you can
* do with it. Below are some examples. For all of the following examples, we
* will work on the assumption that you have done the following:
*
* t = Time.new(1993, 02, 24, 12, 0, 0, "+09:00")
(4-4/6)