Class: Time
- Inherits:
-
Object
- Object
- Time
- Includes:
- Comparable
- Defined in:
- time.c
Overview
Time is an abstraction of dates and times. Time is stored internally as the number of seconds with fraction since the Epoch, January 1, 1970 00:00 UTC. Also see the library module Date. The Time class treats GMT (Greenwich Mean Time) and UTC (Coordinated Universal Time) 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 may have fraction. Be aware of this fact when comparing times 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. 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), Time works slower as when integer is used.
Examples
All of these examples were done using the EST timezone which is GMT-5.
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 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 will default to January 1 of that year at 00:00:00 with the current system timezone. Here are some examples:
Time.new(2002) #=> 2002-01-01 00:00:00 -0500
Time.new(2002, 10) #=> 2002-10-01 00:00:00 -0500
Time.new(2002, 10, 31) #=> 2002-10-31 00:00:00 -0500
Time.new(2002, 10, 31, 2, 2, 2, "+02:00") #=> 2002-10-31 02:02:02 -0200
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 seconds (or fraction of seconds) since the Unix Epoch.
Time.at(628232400) #=> 1989-11-28 00:00:00 -0500
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 will work on the assumption that you have done the following:
t = Time.new(1993, 02, 24, 12, 0, 0, "+09:00")
Was that a monday?
t.monday? #=> false
What year was that again?
t.year #=> 1993
Was is daylight savings at the time?
t.dst? #=> false
What's the day a year later?
t + (60*60*24*365) #=> 1994-02-24 12:00:00 +0900
How many seconds was that since the Unix Epoch?
t.to_i #=> 730522800
You can also do standard functions like compare two times.
t1 = Time.new(2010)
t2 = Time.new(2011)
t1 == t2 #=> false
t1 == t1 #=> true
t1 < t2 #=> true
t1 > t2 #=> false
Time.new(2010,10,31).between?(t1, t2) #=> true
Class Method Summary (collapse)
- + (Object) at
-
+ (Object) gm
Creates a Time object based on given values, interpreted as UTC (GMT).
-
+ (Object) local
Same as Time::gm, but interprets the values in the local time zone.
-
+ (Object) mktime
Same as Time::gm, but interprets the values in the local time zone.
-
+ (Object) now
Alias for Time::new.
-
+ (Object) utc
Creates a Time object based on given values, interpreted as UTC (GMT).
Instance Method Summary (collapse)
-
- (Time) +(numeric)
Addition --- Adds some number of seconds (possibly fractional) to time and returns that value as a new Time object.
-
- (Object) -
Difference --- Returns a new Time object that represents the difference between time and other_time, or subtracts the given number of seconds in numeric from time.
-
- (-1, ...) <=>(other_time)
Comparison---Compares time with other_time.
-
- (Object) asctime
Returns a canonical string representation of time.
-
- (Object) ctime
Returns a canonical string representation of time.
-
- (Object) day
Returns the day of the month (1..n) for time.
-
- (Boolean) dst?
Returns true if time occurs during Daylight Saving Time in its time zone.
-
- (Boolean) eql?(other_time)
Returns true if time and other_time are both Time objects with the same seconds and fractional seconds.
-
- (Boolean) friday?
Returns true if time represents Friday.
-
- (Object) getgm
Returns a new Time object representing time in UTC.
-
- (Object) getlocal
Returns a new Time object representing time in local time (using the local time zone in effect for this process).
-
- (Object) getutc
Returns a new Time object representing time in UTC.
-
- (Boolean) gmt?
Returns true if time represents a time in UTC (GMT).
-
- (Object) gmt_offset
Returns the offset in seconds between the timezone of time and UTC.
-
- (Object) gmtime
Converts time to UTC (GMT), modifying the receiver.
-
- (Object) gmtoff
Returns the offset in seconds between the timezone of time and UTC.
-
- (Fixnum) hash
Returns a hash code for this Time object.
-
- (Fixnum) hour
Returns the hour of the day (0..23) for time.
-
- (Object) initialize
constructor
Returns a Time object.
-
- (Object) initialize_copy
:nodoc:.
-
- (Object) inspect
Returns a string representing time.
-
- (Object) isdst
Returns true if time occurs during Daylight Saving Time in its time zone.
-
- (Object) localtime
Converts time to local time (using the local time zone in effect for this process) modifying the receiver.
-
- (Object) mday
Returns the day of the month (1..n) for time.
-
- (Fixnum) min
Returns the minute of the hour (0..59) for time.
-
- (Object) mon
Returns the month of the year (1..12) for time.
-
- (Boolean) monday?
Returns true if time represents Monday.
-
- (Object) month
Returns the month of the year (1..12) for time.
-
- (Object) nsec
Returns the number of nanoseconds for time.
-
- (Time) round([ndigits])
Rounds sub seconds to a given precision in decimal digits (0 digits by default).
-
- (Boolean) saturday?
Returns true if time represents Saturday.
-
- (Fixnum) sec
Returns the second of the minute (0..60) for time.
-
- (String) strftime(string)
Formats time according to the directives in the given format string.
-
- (Numeric) subsec
Returns the fraction for time.
- - (Object) succ
-
- (Boolean) sunday?
Returns true if time represents Sunday.
-
- (Boolean) thursday?
Returns true if time represents Thursday.
-
- (Array) to_a
Returns a ten-element array of values for time:.
-
- (Float) to_f
Returns the value of time as a floating point number of seconds since the Epoch.
-
- (Object) to_i
Returns the value of time as an integer number of seconds since the Epoch.
-
- (Object) to_r
Returns the value of time as a rational number of seconds since the Epoch.
-
- (Object) to_s
Returns a string representing time.
-
- (Boolean) tuesday?
Returns true if time represents Tuesday.
-
- (Object) tv_nsec
Returns the number of nanoseconds for time.
-
- (Object) tv_sec
Returns the value of time as an integer number of seconds since the Epoch.
-
- (Object) tv_usec
Returns the number of microseconds for time.
-
- (Object) usec
Returns the number of microseconds for time.
-
- (Object) utc
Converts time to UTC (GMT), modifying the receiver.
-
- (Boolean) utc?
Returns true if time represents a time in UTC (GMT).
-
- (Object) utc_offset
Returns the offset in seconds between the timezone of time and UTC.
-
- (Fixnum) wday
Returns an integer representing the day of the week, 0..6, with Sunday == 0.
-
- (Boolean) wednesday?
Returns true if time represents Wednesday.
-
- (Fixnum) yday
Returns an integer representing the day of the year, 1..366.
-
- (Fixnum) year
Returns the year for time (including the century).
-
- (String) zone
Returns the name of the time zone used for time.
Methods included from Comparable
#<, #<=, #==, #>, #>=, #between?
Constructor Details
- (Time) new - (Time) new(year, month = nil, day = nil, hour = nil, min = nil, sec = nil, utc_offset = nil)
Returns a Time object.
It is initialized to the current system time if no argument is given.
Note: The new object will use the resolution available on your system clock, and may include fractional seconds.
If one or more arguments specified, the time is initialized to the specified time.
sec may have fraction if it is a rational.
utc_offset is the offset from UTC. It can be a string such as ???+09:00??? or a number of seconds such as 32400.
a = Time.new #=> 2007-11-19 07:50:02 -0600
b = Time.new #=> 2007-11-19 07:50:02 -0600
a == b #=> false
"%.6f" % a.to_f #=> "1195480202.282373"
"%.6f" % b.to_f #=> "1195480202.283415"
Time.new(2008,6,21, 13,30,0, "+09:00") #=> 2008-06-21 13:30:00 +0900
# A trip for RubyConf 2007
t1 = Time.new(2007,11,1,15,25,0, "+09:00") # JST (Narita)
t2 = Time.new(2007,11,1,12, 5,0, "-05:00") # CDT (Minneapolis)
t3 = Time.new(2007,11,1,13,25,0, "-05:00") # CDT (Minneapolis)
t4 = Time.new(2007,11,1,16,53,0, "-04:00") # EDT (Charlotte)
t5 = Time.new(2007,11,5, 9,24,0, "-05:00") # EST (Charlotte)
t6 = Time.new(2007,11,5,11,21,0, "-05:00") # EST (Detroit)
t7 = Time.new(2007,11,5,13,45,0, "-05:00") # EST (Detroit)
t8 = Time.new(2007,11,6,17,10,0, "+09:00") # JST (Narita)
p((t2-t1)/3600.0) #=> 10.666666666666666
p((t4-t3)/3600.0) #=> 2.466666666666667
p((t6-t5)/3600.0) #=> 1.95
p((t8-t7)/3600.0) #=> 13.416666666666666
2268 2269 2270 2271 2272 2273 2274 2275 |
# File 'time.c', line 2268
static VALUE
time_init(int argc, VALUE *argv, VALUE time)
{
if (argc == 0)
return time_init_0(time);
else
return time_init_1(argc, argv, time);
}
|
Class Method Details
+ (Object) at
+ (Time) utc(year) + (Time) utc(year, month) + (Time) utc(year, month, day) + (Time) utc(year, month, day, hour) + (Time) utc(year, month, day, hour, min) + (Time) utc(year, month, day, hour, min, sec_with_frac) + (Time) utc(year, month, day, hour, min, sec, usec_with_frac) + (Time) utc(sec, min, hour, day, month, year, wday, yday, isdst, tz) + (Time) gm(year) + (Time) gm(year, month) + (Time) gm(year, month, day) + (Time) gm(year, month, day, hour) + (Time) gm(year, month, day, hour, min) + (Time) gm(year, month, day, hour, min, sec_with_frac) + (Time) gm(year, month, day, hour, min, sec, usec_with_frac) + (Time) gm(sec, min, hour, day, month, year, wday, yday, isdst, tz)
Creates a Time object 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 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 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
3141 3142 3143 3144 3145 |
# File 'time.c', line 3141
static VALUE
time_s_mkutc(int argc, VALUE *argv, VALUE klass)
{
return time_utc_or_local(argc, argv, TRUE, klass);
}
|
+ (Time) local(year) + (Time) local(year, month) + (Time) local(year, month, day) + (Time) local(year, month, day, hour) + (Time) local(year, month, day, hour, min) + (Time) local(year, month, day, hour, min, sec_with_frac) + (Time) local(year, month, day, hour, min, sec, usec_with_frac) + (Time) local(sec, min, hour, day, month, year, wday, yday, isdst, tz) + (Time) mktime(year) + (Time) mktime(year, month) + (Time) mktime(year, month, day) + (Time) mktime(year, month, day, hour) + (Time) mktime(year, month, day, hour, min) + (Time) mktime(year, month, day, hour, min, sec_with_frac) + (Time) mktime(year, month, day, hour, min, sec, usec_with_frac) + (Time) mktime(sec, min, hour, day, month, year, wday, yday, isdst, tz)
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
3172 3173 3174 3175 3176 |
# File 'time.c', line 3172
static VALUE
time_s_mktime(int argc, VALUE *argv, VALUE klass)
{
return time_utc_or_local(argc, argv, FALSE, klass);
}
|
+ (Time) local(year) + (Time) local(year, month) + (Time) local(year, month, day) + (Time) local(year, month, day, hour) + (Time) local(year, month, day, hour, min) + (Time) local(year, month, day, hour, min, sec_with_frac) + (Time) local(year, month, day, hour, min, sec, usec_with_frac) + (Time) local(sec, min, hour, day, month, year, wday, yday, isdst, tz) + (Time) mktime(year) + (Time) mktime(year, month) + (Time) mktime(year, month, day) + (Time) mktime(year, month, day, hour) + (Time) mktime(year, month, day, hour, min) + (Time) mktime(year, month, day, hour, min, sec_with_frac) + (Time) mktime(year, month, day, hour, min, sec, usec_with_frac) + (Time) mktime(sec, min, hour, day, month, year, wday, yday, isdst, tz)
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
3172 3173 3174 3175 3176 |
# File 'time.c', line 3172
static VALUE
time_s_mktime(int argc, VALUE *argv, VALUE klass)
{
return time_utc_or_local(argc, argv, FALSE, klass);
}
|
+ (Object) now
Alias for Time::new. Returns a Time object initialized to the current system time.
+ (Time) utc(year) + (Time) utc(year, month) + (Time) utc(year, month, day) + (Time) utc(year, month, day, hour) + (Time) utc(year, month, day, hour, min) + (Time) utc(year, month, day, hour, min, sec_with_frac) + (Time) utc(year, month, day, hour, min, sec, usec_with_frac) + (Time) utc(sec, min, hour, day, month, year, wday, yday, isdst, tz) + (Time) gm(year) + (Time) gm(year, month) + (Time) gm(year, month, day) + (Time) gm(year, month, day, hour) + (Time) gm(year, month, day, hour, min) + (Time) gm(year, month, day, hour, min, sec_with_frac) + (Time) gm(year, month, day, hour, min, sec, usec_with_frac) + (Time) gm(sec, min, hour, day, month, year, wday, yday, isdst, tz)
Creates a Time object 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 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 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
3141 3142 3143 3144 3145 |
# File 'time.c', line 3141
static VALUE
time_s_mkutc(int argc, VALUE *argv, VALUE klass)
{
return time_utc_or_local(argc, argv, TRUE, klass);
}
|
Instance Method Details
- (Time) +(numeric)
Addition --- Adds some number of seconds (possibly fractional) to 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
3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 |
# File 'time.c', line 3743
static VALUE
time_plus(VALUE time1, VALUE time2)
{
struct time_object *tobj;
GetTimeval(time1, tobj);
if (IsTimeval(time2)) {
rb_raise(rb_eTypeError, "time + time?");
}
return time_add(tobj, time2, 1);
}
|
- (Float) -(other_time) - (Time) -(numeric)
Difference --- Returns a new Time object that represents the difference between time and other_time, or subtracts the given number of seconds in numeric from time.
t = Time.now #=> 2007-11-19 08:23:10 -0600
t2 = t + 2592000 #=> 2007-12-19 08:23:10 -0600
t2 - t #=> 2592000.0
t2 - 2592000 #=> 2007-11-19 08:23:10 -0600
3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 |
# File 'time.c', line 3770
static VALUE
time_minus(VALUE time1, VALUE time2)
{
struct time_object *tobj;
GetTimeval(time1, tobj);
if (IsTimeval(time2)) {
struct time_object *tobj2;
GetTimeval(time2, tobj2);
return rb_Float(rb_time_unmagnify_to_float(wsub(tobj->timew, tobj2->timew)));
}
return time_add(tobj, time2, -1);
}
|
- (-1, ...) <=>(other_time)
Comparison---Compares time with other_time. The return value is +1 if time is greater than other_time, 0 if time is equal to other_time and -1 if time is smaller than other_time.
t = Time.now #=> 2007-11-19 08:12:12 -0600
t2 = t + 2592000 #=> 2007-12-19 08:12:12 -0600
t <=> t2 #=> -1
t2 <=> t #=> 1
t = Time.now #=> 2007-11-19 08:13:38 -0600
t2 = t + 0.1 #=> 2007-11-19 08:13:38 -0600
t.nsec #=> 98222999
t2.nsec #=> 198222999
t <=> t2 #=> -1
t2 <=> t #=> 1
t <=> t #=> 0
3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 |
# File 'time.c', line 3356
static VALUE
time_cmp(VALUE time1, VALUE time2)
{
struct time_object *tobj1, *tobj2;
int n;
GetTimeval(time1, tobj1);
if (IsTimeval(time2)) {
GetTimeval(time2, tobj2);
n = wcmp(tobj1->timew, tobj2->timew);
}
else {
return rb_invcmp(time1, time2);
}
if (n == 0) return INT2FIX(0);
if (n > 0) return INT2FIX(1);
return INT2FIX(-1);
}
|
- (String) asctime - (String) ctime
Returns a canonical string representation of time.
Time.now.asctime #=> "Wed Apr 9 08:56:03 2003"
3677 3678 3679 3680 3681 |
# File 'time.c', line 3677
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
|
- (String) asctime - (String) ctime
Returns a canonical string representation of time.
Time.now.asctime #=> "Wed Apr 9 08:56:03 2003"
3677 3678 3679 3680 3681 |
# File 'time.c', line 3677
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
|
- (Fixnum) day - (Fixnum) mday
Returns the day of the month (1..n) for time.
t = Time.now #=> 2007-11-19 08:27:03 -0600
t.day #=> 19
t.mday #=> 19
3966 3967 3968 3969 3970 3971 3972 3973 3974 |
# File 'time.c', line 3966
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
|
- (Boolean) isdst - (Boolean) dst?
Returns true if time occurs during Daylight Saving Time in its time zone.
# CST6CDT:
Time.local(2000, 1, 1).zone #=> "CST"
Time.local(2000, 1, 1).isdst #=> false
Time.local(2000, 1, 1).dst? #=> false
Time.local(2000, 7, 1).zone #=> "CDT"
Time.local(2000, 7, 1).isdst #=> true
Time.local(2000, 7, 1).dst? #=> true
# Asia/Tokyo:
Time.local(2000, 1, 1).zone #=> "JST"
Time.local(2000, 1, 1).isdst #=> false
Time.local(2000, 1, 1).dst? #=> false
Time.local(2000, 7, 1).zone #=> "JST"
Time.local(2000, 7, 1).isdst #=> false
Time.local(2000, 7, 1).dst? #=> false
4210 4211 4212 4213 4214 4215 4216 4217 4218 |
# File 'time.c', line 4210
static VALUE
time_isdst(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.isdst ? Qtrue : Qfalse;
}
|
- (Boolean) eql?(other_time)
Returns true if time and other_time are both Time objects with the same seconds and fractional seconds.
3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 |
# File 'time.c', line 3383
static VALUE
time_eql(VALUE time1, VALUE time2)
{
struct time_object *tobj1, *tobj2;
GetTimeval(time1, tobj1);
if (IsTimeval(time2)) {
GetTimeval(time2, tobj2);
return rb_equal(w2v(tobj1->timew), w2v(tobj2->timew));
}
return Qfalse;
}
|
- (Boolean) friday?
Returns true if time represents Friday.
t = Time.local(1987, 12, 18) #=> 1987-12-18 00:00:00 -0600
t.friday? #=> true
4143 4144 4145 4146 4147 |
# File 'time.c', line 4143
static VALUE
time_friday(VALUE time)
{
wday_p(5);
}
|
- (Time) getgm - (Time) getutc
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
y = t.getgm #=> 2000-01-02 02:15:01 UTC
y.gmt? #=> true
t == y #=> true
3651 3652 3653 3654 3655 |
# File 'time.c', line 3651
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
|
- (Time) getlocal - (Time) getlocal(utc_offset)
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.
t = Time.utc(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 UTC
t.utc? #=> true
l = t.getlocal #=> 2000-01-01 14:15:01 -0600
l.utc? #=> false
t == l #=> true
j = t.getlocal("+09:00") #=> 2000-01-02 05:15:01 +0900
j.utc? #=> false
t == j #=> true
3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 |
# File 'time.c', line 3619
static VALUE
time_getlocaltime(int argc, VALUE *argv, VALUE time)
{
VALUE off;
rb_scan_args(argc, argv, "01", &off);
if (!NIL_P(off)) {
off = utc_offset_arg(off);
validate_utc_offset(off);
time = time_dup(time);
time_set_utc_offset(time, off);
return time_fixoff(time);
}
return time_localtime(time_dup(time));
}
|
- (Time) getgm - (Time) getutc
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
y = t.getgm #=> 2000-01-02 02:15:01 UTC
y.gmt? #=> true
t == y #=> true
3651 3652 3653 3654 3655 |
# File 'time.c', line 3651
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
|
- (Boolean) utc? - (Boolean) gmt?
Returns true if time represents a time in UTC (GMT).
t = Time.now #=> 2007-11-19 08:15:23 -0600
t.utc? #=> false
t = Time.gm(2000,"jan",1,20,15,1) #=> 2000-01-01 20:15:01 UTC
t.utc? #=> true
t = Time.now #=> 2007-11-19 08:16:03 -0600
t.gmt? #=> false
t = Time.gm(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 UTC
t.gmt? #=> true
3414 3415 3416 3417 3418 3419 3420 3421 3422 |
# File 'time.c', line 3414
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj)) return Qtrue;
return Qfalse;
}
|
- (Fixnum) gmt_offset - (Fixnum) gmtoff - (Fixnum) utc_offset
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
t.gmt_offset #=> 0
l = t.getlocal #=> 2000-01-01 14:15:01 -0600
l.gmt_offset #=> -21600
4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 |
# File 'time.c', line 4264
static VALUE
time_utc_offset(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (TIME_UTC_P(tobj)) {
return INT2FIX(0);
}
else {
return tobj->vtm.utc_offset;
}
}
|
- (Time) gmtime - (Time) utc
Converts time to UTC (GMT), modifying the receiver.
t = Time.now #=> 2007-11-19 08:18:31 -0600
t.gmt? #=> false
t.gmtime #=> 2007-11-19 14:18:31 UTC
t.gmt? #=> true
t = Time.now #=> 2007-11-19 08:18:51 -0600
t.utc? #=> false
t.utc #=> 2007-11-19 14:18:51 UTC
t.utc? #=> true
3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 |
# File 'time.c', line 3541
static VALUE
time_gmtime(VALUE time)
{
struct time_object *tobj;
struct vtm vtm;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj)) {
if (tobj->tm_got)
return time;
}
else {
time_modify(time);
}
if (!gmtimew(tobj->timew, &vtm))
rb_raise(rb_eArgError, "gmtime error");
tobj->vtm = vtm;
tobj->tm_got = 1;
TIME_SET_UTC(tobj);
return time;
}
|
- (Fixnum) gmt_offset - (Fixnum) gmtoff - (Fixnum) utc_offset
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
t.gmt_offset #=> 0
l = t.getlocal #=> 2000-01-01 14:15:01 -0600
l.gmt_offset #=> -21600
4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 |
# File 'time.c', line 4264
static VALUE
time_utc_offset(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (TIME_UTC_P(tobj)) {
return INT2FIX(0);
}
else {
return tobj->vtm.utc_offset;
}
}
|
- (Fixnum) hash
Returns a hash code for this Time object.
3431 3432 3433 3434 3435 3436 3437 3438 |
# File 'time.c', line 3431
static VALUE
time_hash(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_hash(w2v(tobj->timew));
}
|
- (Fixnum) hour
Returns the hour of the day (0..23) for time.
t = Time.now #=> 2007-11-19 08:26:20 -0600
t.hour #=> 8
3944 3945 3946 3947 3948 3949 3950 3951 3952 |
# File 'time.c', line 3944
static VALUE
time_hour(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.hour);
}
|
- (Object) initialize_copy
:nodoc:
3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 |
# File 'time.c', line 3441
static VALUE
time_init_copy(VALUE copy, VALUE time)
{
struct time_object *tobj, *tcopy;
if (!OBJ_INIT_COPY(copy, time)) return copy;
GetTimeval(time, tobj);
GetTimeval(copy, tcopy);
MEMCPY(tcopy, tobj, struct time_object, 1);
return copy;
}
|
- (String) inspect - (String) to_s
Returns a string representing time. Equivalent to calling #strftime with the appropriate format string.
t = Time.now
t.to_s => "2012-11-10 18:16:12 +0100"
t.strftime "%Y-%m-%d %H:%M:%S %z" => "2012-11-10 18:16:12 +0100"
t.utc.to_s => "2012-11-10 17:16:12 UTC"
t.strftime "%Y-%m-%d %H:%M:%S UTC" => "2012-11-10 17:16:12 UTC"
3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 |
# File 'time.c', line 3699
static VALUE
time_to_s(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj))
return strftimev("%Y-%m-%d %H:%M:%S UTC", time, rb_usascii_encoding());
else
return strftimev("%Y-%m-%d %H:%M:%S %z", time, rb_usascii_encoding());
}
|
- (Boolean) isdst - (Boolean) dst?
Returns true if time occurs during Daylight Saving Time in its time zone.
# CST6CDT:
Time.local(2000, 1, 1).zone #=> "CST"
Time.local(2000, 1, 1).isdst #=> false
Time.local(2000, 1, 1).dst? #=> false
Time.local(2000, 7, 1).zone #=> "CDT"
Time.local(2000, 7, 1).isdst #=> true
Time.local(2000, 7, 1).dst? #=> true
# Asia/Tokyo:
Time.local(2000, 1, 1).zone #=> "JST"
Time.local(2000, 1, 1).isdst #=> false
Time.local(2000, 1, 1).dst? #=> false
Time.local(2000, 7, 1).zone #=> "JST"
Time.local(2000, 7, 1).isdst #=> false
Time.local(2000, 7, 1).dst? #=> false
4210 4211 4212 4213 4214 4215 4216 4217 4218 |
# File 'time.c', line 4210
static VALUE
time_isdst(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.isdst ? Qtrue : Qfalse;
}
|
- (Time) localtime - (Time) localtime(utc_offset)
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.
t = Time.utc(2000, "jan", 1, 20, 15, 1) #=> 2000-01-01 20:15:01 UTC
t.utc? #=> true
t.localtime #=> 2000-01-01 14:15:01 -0600
t.utc? #=> false
t.localtime("+09:00") #=> 2000-01-02 05:15:01 +0900
t.utc? #=> false
3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 |
# File 'time.c', line 3506
static VALUE
time_localtime_m(int argc, VALUE *argv, VALUE time)
{
VALUE off;
rb_scan_args(argc, argv, "01", &off);
if (!NIL_P(off)) {
off = utc_offset_arg(off);
validate_utc_offset(off);
time_set_utc_offset(time, off);
return time_fixoff(time);
}
return time_localtime(time);
}
|
- (Fixnum) day - (Fixnum) mday
Returns the day of the month (1..n) for time.
t = Time.now #=> 2007-11-19 08:27:03 -0600
t.day #=> 19
t.mday #=> 19
3966 3967 3968 3969 3970 3971 3972 3973 3974 |
# File 'time.c', line 3966
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
|
- (Fixnum) min
Returns the minute of the hour (0..59) for time.
t = Time.now #=> 2007-11-19 08:25:51 -0600
t.min #=> 25
3924 3925 3926 3927 3928 3929 3930 3931 3932 |
# File 'time.c', line 3924
static VALUE
time_min(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.min);
}
|
- (Fixnum) mon - (Fixnum) month
Returns the month of the year (1..12) for time.
t = Time.now #=> 2007-11-19 08:27:30 -0600
t.mon #=> 11
t.month #=> 11
3988 3989 3990 3991 3992 3993 3994 3995 3996 |
# File 'time.c', line 3988
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
|
- (Boolean) monday?
Returns true if time represents Monday.
t = Time.local(2003, 8, 4) #=> 2003-08-04 00:00:00 -0500
p t.monday? #=> true
4079 4080 4081 4082 4083 |
# File 'time.c', line 4079
static VALUE
time_monday(VALUE time)
{
wday_p(1);
}
|
- (Fixnum) mon - (Fixnum) month
Returns the month of the year (1..12) for time.
t = Time.now #=> 2007-11-19 08:27:30 -0600
t.mon #=> 11
t.month #=> 11
3988 3989 3990 3991 3992 3993 3994 3995 3996 |
# File 'time.c', line 3988
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
|
- (Integer) nsec - (Integer) tv_nsec
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 digits of #to_f and #nsec are different because IEEE 754 double is not accurate enough to represent the exact number of nanoseconds since the Epoch.
The more accurate value is returned by #nsec.
3296 3297 3298 3299 3300 3301 3302 3303 |
# File 'time.c', line 3296
static VALUE
time_nsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_to_int(w2v(wmulquoll(wmod(tobj->timew, WINT2WV(TIME_SCALE)), 1000000000, TIME_SCALE)));
}
|
- (Time) round([ndigits])
Rounds sub seconds to a given precision in decimal digits (0 digits by default). It returns a new Time object. ndigits should be zero or positive integer.
require 'time'
t = Time.utc(2010,3,30, 5,43,"25.123456789".to_r)
p t.iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z"
p t.round.iso8601(10) #=> "2010-03-30T05:43:25.0000000000Z"
p t.round(0).iso8601(10) #=> "2010-03-30T05:43:25.0000000000Z"
p t.round(1).iso8601(10) #=> "2010-03-30T05:43:25.1000000000Z"
p t.round(2).iso8601(10) #=> "2010-03-30T05:43:25.1200000000Z"
p t.round(3).iso8601(10) #=> "2010-03-30T05:43:25.1230000000Z"
p t.round(4).iso8601(10) #=> "2010-03-30T05:43:25.1235000000Z"
p t.round(5).iso8601(10) #=> "2010-03-30T05:43:25.1234600000Z"
p t.round(6).iso8601(10) #=> "2010-03-30T05:43:25.1234570000Z"
p t.round(7).iso8601(10) #=> "2010-03-30T05:43:25.1234568000Z"
p t.round(8).iso8601(10) #=> "2010-03-30T05:43:25.1234567900Z"
p t.round(9).iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z"
p t.round(10).iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z"
t = Time.utc(1999,12,31, 23,59,59)
p((t + 0.4).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z"
p((t + 0.49).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z"
p((t + 0.5).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z"
p((t + 1.4).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z"
p((t + 1.49).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z"
p((t + 1.5).round.iso8601(3)) #=> "2000-01-01T00:00:01.000Z"
t = Time.utc(1999,12,31, 23,59,59)
p (t + 0.123456789).round(4).iso8601(6) #=> "1999-12-31T23:59:59.123500Z"
3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 |
# File 'time.c', line 3853
static VALUE
time_round(int argc, VALUE *argv, VALUE time)
{
VALUE ndigits, v, a, b, den;
long nd;
struct time_object *tobj;
rb_scan_args(argc, argv, "01", &ndigits);
if (NIL_P(ndigits))
ndigits = INT2FIX(0);
else
ndigits = rb_to_int(ndigits);
nd = NUM2LONG(ndigits);
if (nd < 0)
rb_raise(rb_eArgError, "negative ndigits given");
GetTimeval(time, tobj);
v = w2v(rb_time_unmagnify(tobj->timew));
a = INT2FIX(1);
b = INT2FIX(10);
while (0 < nd) {
if (nd & 1)
a = mul(a, b);
b = mul(b, b);
nd = nd >> 1;
}
den = quo(INT2FIX(1), a);
v = mod(v, den);
if (lt(v, quo(den, INT2FIX(2))))
return time_add(tobj, v, -1);
else
return time_add(tobj, sub(den, v), 1);
}
|
- (Boolean) saturday?
Returns true if time represents Saturday.
t = Time.local(2006, 6, 10) #=> 2006-06-10 00:00:00 -0500
t.saturday? #=> true
4159 4160 4161 4162 4163 |
# File 'time.c', line 4159
static VALUE
time_saturday(VALUE time)
{
wday_p(6);
}
|
- (Fixnum) sec
Returns the second of the minute (0..60) for time.
Note: Seconds range from zero to 60 to allow the system to inject leap seconds. See en.wikipedia.org/wiki/Leap_second for further details.
t = Time.now #=> 2007-11-19 08:25:02 -0600
t.sec #=> 2
3904 3905 3906 3907 3908 3909 3910 3911 3912 |
# File 'time.c', line 3904
static VALUE
time_sec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.sec);
}
|
- (String) strftime(string)
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:
%<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
The minimum field width specifies the minimum width.
The modifiers are "E" and "O". They are ignored.
Format directives:
Date (Year, Month, Day):
%Y - Year with century (can be negative, 4 digits at least)
-0001, 0000, 1995, 2009, 14292, etc.
%C - year / 100 (rounded down such as 20 in 2009)
%y - year % 100 (00..99)
%m - Month of the year, zero-padded (01..12)
%_m blank-padded ( 1..12)
%-m no-padded (1..12)
%B - The full month name (``January'')
%^B uppercased (``JANUARY'')
%b - The abbreviated month name (``Jan'')
%^b uppercased (``JAN'')
%h - Equivalent to %b
%d - Day of the month, zero-padded (01..31)
%-d no-padded (1..31)
%e - Day of the month, blank-padded ( 1..31)
%j - Day of the year (001..366)
Time (Hour, Minute, Second, Subsecond):
%H - Hour of the day, 24-hour clock, zero-padded (00..23)
%k - Hour of the day, 24-hour clock, blank-padded ( 0..23)
%I - Hour of the day, 12-hour clock, zero-padded (01..12)
%l - Hour of the day, 12-hour clock, blank-padded ( 1..12)
%P - Meridian indicator, lowercase (``am'' or ``pm'')
%p - Meridian indicator, uppercase (``AM'' or ``PM'')
%M - Minute of the hour (00..59)
%S - Second of the minute (00..60)
%L - Millisecond of the second (000..999)
%N - Fractional seconds digits, default is 9 digits (nanosecond)
%3N milli second (3 digits)
%6N micro second (6 digits)
%9N nano second (9 digits)
%12N pico second (12 digits)
%15N femto second (15 digits)
%18N atto second (18 digits)
%21N zepto second (21 digits)
%24N yocto second (24 digits)
Time zone:
%z - Time zone as hour and minute offset from UTC (e.g. +0900)
%:z - hour and minute offset from UTC with a colon (e.g. +09:00)
%::z - hour, minute and second offset from UTC (e.g. +09:00:00)
%Z - Abbreviated time zone name or similar information.
Weekday:
%A - The full weekday name (``Sunday'')
%^A uppercased (``SUNDAY'')
%a - The abbreviated name (``Sun'')
%^a uppercased (``SUN'')
%u - Day of the week (Monday is 1, 1..7)
%w - Day of the week (Sunday is 0, 0..6)
ISO 8601 week-based year and week number:
The first week of YYYY starts with a Monday and includes YYYY-01-04.
The days in the year before the first week are in the last week of
the previous year.
%G - The week-based year
%g - The last 2 digits of the week-based year (00..99)
%V - Week number of the week-based year (01..53)
Week number:
The first week of YYYY that starts with a Sunday or Monday (according to %U
or %W). The days in the year before the first week are in week 0.
%U - Week number of the year. The week starts with Sunday. (00..53)
%W - Week number of the year. The week starts with Monday. (00..53)
Seconds since the Epoch:
%s - Number of seconds since 1970-01-01 00:00:00 UTC.
Literal string:
%n - Newline character (\n)
%t - Tab character (\t)
%% - Literal ``%'' character
Combination:
%c - date and time (%a %b %e %T %Y)
%D - Date (%m/%d/%y)
%F - The ISO 8601 date format (%Y-%m-%d)
%v - VMS date (%e-%^b-%4Y)
%x - Same as %D
%X - Same as %T
%r - 12-hour time (%I:%M:%S %p)
%R - 24-hour time (%H:%M)
%T - 24-hour time (%H:%M:%S)
This method is similar to strftime() function defined in ISO C and POSIX.
While all directives are locale independant since Ruby 1.9 %Z is platform dependant. So, the result may differ even if the same format string is used in other systems such as C.
%z is recommended over %Z. %Z doesn't identify the timezone. For example, "CST" is used at America/Chicago (-06:00), America/Havana (-05:00), Asia/Harbin (+08:00), Australia/Darwin (+09:30) and Australia/Adelaide (+10:30). Also, %Z is highly dependent on the operating system. For example, it may generate a non ASCII string on Japanese Windows. i.e. the result can be different to "JST". So the numeric time zone offset, %z, is recommended.
Examples:
t = Time.new(2007,11,19,8,37,48,"-06:00") #=> 2007-11-19 08:37:48 -0600
t.strftime("Printed on %m/%d/%Y") #=> "Printed on 11/19/2007"
t.strftime("at %I:%M%p") #=> "at 08:37AM"
Various ISO 8601 formats:
%Y%m%d => 20071119 Calendar date (basic)
%F => 2007-11-19 Calendar date (extended)
%Y-%m => 2007-11 Calendar date, reduced accuracy, specific month
%Y => 2007 Calendar date, reduced accuracy, specific year
%C => 20 Calendar date, reduced accuracy, specific century
%Y%j => 2007323 Ordinal date (basic)
%Y-%j => 2007-323 Ordinal date (extended)
%GW%V%u => 2007W471 Week date (basic)
%G-W%V-%u => 2007-W47-1 Week date (extended)
%GW%V => 2007W47 Week date, reduced accuracy, specific week (basic)
%G-W%V => 2007-W47 Week date, reduced accuracy, specific week (extended)
%H%M%S => 083748 Local time (basic)
%T => 08:37:48 Local time (extended)
%H%M => 0837 Local time, reduced accuracy, specific minute (basic)
%H:%M => 08:37 Local time, reduced accuracy, specific minute (extended)
%H => 08 Local time, reduced accuracy, specific hour
%H%M%S,%L => 083748,000 Local time with decimal fraction, comma as decimal sign (basic)
%T,%L => 08:37:48,000 Local time with decimal fraction, comma as decimal sign (extended)
%H%M%S.%L => 083748.000 Local time with decimal fraction, full stop as decimal sign (basic)
%T.%L => 08:37:48.000 Local time with decimal fraction, full stop as decimal sign (extended)
%H%M%S%z => 083748-0600 Local time and the difference from UTC (basic)
%T%:z => 08:37:48-06:00 Local time and the difference from UTC (extended)
%Y%m%dT%H%M%S%z => 20071119T083748-0600 Date and time of day for calendar date (basic)
%FT%T%:z => 2007-11-19T08:37:48-06:00 Date and time of day for calendar date (extended)
%Y%jT%H%M%S%z => 2007323T083748-0600 Date and time of day for ordinal date (basic)
%Y-%jT%T%:z => 2007-323T08:37:48-06:00 Date and time of day for ordinal date (extended)
%GW%V%uT%H%M%S%z => 2007W471T083748-0600 Date and time of day for week date (basic)
%G-W%V-%uT%T%:z => 2007-W47-1T08:37:48-06:00 Date and time of day for week date (extended)
%Y%m%dT%H%M => 20071119T0837 Calendar date and local time (basic)
%FT%R => 2007-11-19T08:37 Calendar date and local time (extended)
%Y%jT%H%MZ => 2007323T0837Z Ordinal date and UTC of day (basic)
%Y-%jT%RZ => 2007-323T08:37Z Ordinal date and UTC of day (extended)
%GW%V%uT%H%M%z => 2007W471T0837-0600 Week date and local time and difference from UTC (basic)
%G-W%V-%uT%R%:z => 2007-W47-1T08:37-06:00 Week date and local time and difference from UTC (extended)
4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 |
# File 'time.c', line 4565
static VALUE
time_strftime(VALUE time, VALUE format)
{
struct time_object *tobj;
char buffer[SMALLBUF], *buf = buffer;
const char *fmt;
long len;
rb_encoding *enc;
VALUE str;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
StringValue(format);
if (!rb_enc_str_asciicompat_p(format)) {
rb_raise(rb_eArgError, "format should have ASCII compatible encoding");
}
format = rb_str_new4(format);
fmt = RSTRING_PTR(format);
len = RSTRING_LEN(format);
enc = rb_enc_get(format);
if (len == 0) {
rb_warning("strftime called with empty format string");
}
else if (memchr(fmt, '\0', len)) {
/* Ruby string may contain \0's. */
const char *p = fmt, *pe = fmt + len;
str = rb_str_new(0, 0);
while (p < pe) {
len = rb_strftime_alloc(&buf, format, p, enc,
&tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
rb_str_cat(str, buf, len);
p += strlen(p);
if (buf != buffer) {
xfree(buf);
buf = buffer;
}
for (fmt = p; p < pe && !*p; ++p);
if (p > fmt) rb_str_cat(str, fmt, p - fmt);
}
return str;
}
else {
len = rb_strftime_alloc(&buf, format, RSTRING_PTR(format), enc,
&tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
}
str = rb_enc_str_new(buf, len, enc);
if (buf != buffer) xfree(buf);
return str;
}
|
- (Numeric) subsec
Returns the fraction for time.
The return value can be a rational number.
t = Time.now #=> 2009-03-26 22:33:12 +0900
"%10.9f" % t.to_f #=> "1238074392.940563917"
t.subsec #=> (94056401/100000000)
The lowest digits of #to_f and #subsec are different because IEEE 754 double is not accurate enough to represent the rational number.
The more accurate value is returned by #subsec.
3324 3325 3326 3327 3328 3329 3330 3331 |
# File 'time.c', line 3324
static VALUE
time_subsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return quo(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE));
}
|
- (Object) succ
- (Boolean) sunday?
Returns true if time represents Sunday.
t = Time.local(1990, 4, 1) #=> 1990-04-01 00:00:00 -0600
t.sunday? #=> true
4063 4064 4065 4066 4067 |
# File 'time.c', line 4063
static VALUE
time_sunday(VALUE time)
{
wday_p(0);
}
|
- (Boolean) thursday?
Returns true if time represents Thursday.
t = Time.local(1995, 12, 21) #=> 1995-12-21 00:00:00 -0600
p t.thursday? #=> true
4127 4128 4129 4130 4131 |
# File 'time.c', line 4127
static VALUE
time_thursday(VALUE time)
{
wday_p(4);
}
|
- (Array) to_a
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 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"]
4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 |
# File 'time.c', line 4297
static VALUE
time_to_a(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return rb_ary_new3(10,
INT2FIX(tobj->vtm.sec),
INT2FIX(tobj->vtm.min),
INT2FIX(tobj->vtm.hour),
INT2FIX(tobj->vtm.mday),
INT2FIX(tobj->vtm.mon),
tobj->vtm.year,
INT2FIX(tobj->vtm.wday),
INT2FIX(tobj->vtm.yday),
tobj->vtm.isdst?Qtrue:Qfalse,
time_zone(time));
}
|
- (Float) to_f
Returns the value of time as a floating point number of seconds since the Epoch.
t = Time.now
"%10.5f" % t.to_f #=> "1270968744.77658"
t.to_i #=> 1270968744
Note that IEEE 754 double is not accurate enough to represent the number of nanoseconds since the Epoch.
3215 3216 3217 3218 3219 3220 3221 3222 |
# File 'time.c', line 3215
static VALUE
time_to_f(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_Float(rb_time_unmagnify_to_float(tobj->timew));
}
|
- (Integer) to_i - (Integer) tv_sec
Returns the value of time as an integer number of seconds since the Epoch.
t = Time.now
"%10.5f" % t.to_f #=> "1270968656.89607"
t.to_i #=> 1270968656
3191 3192 3193 3194 3195 3196 3197 3198 |
# File 'time.c', line 3191
static VALUE
time_to_i(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));
}
|
- (Object) to_r
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 the nanoseconds since the Epoch. You can use this method to convert time to another Epoch.
3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 |
# File 'time.c', line 3239
static VALUE
time_to_r(VALUE time)
{
struct time_object *tobj;
VALUE v;
GetTimeval(time, tobj);
v = w2v(rb_time_unmagnify(tobj->timew));
if (!RB_TYPE_P(v, T_RATIONAL)) {
v = rb_Rational1(v);
}
return v;
}
|
- (String) inspect - (String) to_s
Returns a string representing time. Equivalent to calling #strftime with the appropriate format string.
t = Time.now
t.to_s => "2012-11-10 18:16:12 +0100"
t.strftime "%Y-%m-%d %H:%M:%S %z" => "2012-11-10 18:16:12 +0100"
t.utc.to_s => "2012-11-10 17:16:12 UTC"
t.strftime "%Y-%m-%d %H:%M:%S UTC" => "2012-11-10 17:16:12 UTC"
3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 |
# File 'time.c', line 3699
static VALUE
time_to_s(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj))
return strftimev("%Y-%m-%d %H:%M:%S UTC", time, rb_usascii_encoding());
else
return strftimev("%Y-%m-%d %H:%M:%S %z", time, rb_usascii_encoding());
}
|
- (Boolean) tuesday?
Returns true if time represents Tuesday.
t = Time.local(1991, 2, 19) #=> 1991-02-19 00:00:00 -0600
p t.tuesday? #=> true
4095 4096 4097 4098 4099 |
# File 'time.c', line 4095
static VALUE
time_tuesday(VALUE time)
{
wday_p(2);
}
|
- (Integer) nsec - (Integer) tv_nsec
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 digits of #to_f and #nsec are different because IEEE 754 double is not accurate enough to represent the exact number of nanoseconds since the Epoch.
The more accurate value is returned by #nsec.
3296 3297 3298 3299 3300 3301 3302 3303 |
# File 'time.c', line 3296
static VALUE
time_nsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_to_int(w2v(wmulquoll(wmod(tobj->timew, WINT2WV(TIME_SCALE)), 1000000000, TIME_SCALE)));
}
|
- (Integer) to_i - (Integer) tv_sec
Returns the value of time as an integer number of seconds since the Epoch.
t = Time.now
"%10.5f" % t.to_f #=> "1270968656.89607"
t.to_i #=> 1270968656
3191 3192 3193 3194 3195 3196 3197 3198 |
# File 'time.c', line 3191
static VALUE
time_to_i(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));
}
|
- (Integer) usec - (Integer) tv_usec
Returns the number of microseconds for time.
t = Time.now #=> 2007-11-19 08:03:26 -0600
"%10.6f" % t.to_f #=> "1195481006.775195"
t.usec #=> 775195
3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 |
# File 'time.c', line 3265
static VALUE
time_usec(VALUE time)
{
struct time_object *tobj;
wideval_t w, q, r;
GetTimeval(time, tobj);
w = wmod(tobj->timew, WINT2WV(TIME_SCALE));
wmuldivmod(w, WINT2FIXWV(1000000), WINT2FIXWV(TIME_SCALE), &q, &r);
return rb_to_int(w2v(q));
}
|
- (Integer) usec - (Integer) tv_usec
Returns the number of microseconds for time.
t = Time.now #=> 2007-11-19 08:03:26 -0600
"%10.6f" % t.to_f #=> "1195481006.775195"
t.usec #=> 775195
3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 |
# File 'time.c', line 3265
static VALUE
time_usec(VALUE time)
{
struct time_object *tobj;
wideval_t w, q, r;
GetTimeval(time, tobj);
w = wmod(tobj->timew, WINT2WV(TIME_SCALE));
wmuldivmod(w, WINT2FIXWV(1000000), WINT2FIXWV(TIME_SCALE), &q, &r);
return rb_to_int(w2v(q));
}
|
- (Time) gmtime - (Time) utc
Converts time to UTC (GMT), modifying the receiver.
t = Time.now #=> 2007-11-19 08:18:31 -0600
t.gmt? #=> false
t.gmtime #=> 2007-11-19 14:18:31 UTC
t.gmt? #=> true
t = Time.now #=> 2007-11-19 08:18:51 -0600
t.utc? #=> false
t.utc #=> 2007-11-19 14:18:51 UTC
t.utc? #=> true
3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 |
# File 'time.c', line 3541
static VALUE
time_gmtime(VALUE time)
{
struct time_object *tobj;
struct vtm vtm;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj)) {
if (tobj->tm_got)
return time;
}
else {
time_modify(time);
}
if (!gmtimew(tobj->timew, &vtm))
rb_raise(rb_eArgError, "gmtime error");
tobj->vtm = vtm;
tobj->tm_got = 1;
TIME_SET_UTC(tobj);
return time;
}
|
- (Boolean) utc? - (Boolean) gmt?
Returns true if time represents a time in UTC (GMT).
t = Time.now #=> 2007-11-19 08:15:23 -0600
t.utc? #=> false
t = Time.gm(2000,"jan",1,20,15,1) #=> 2000-01-01 20:15:01 UTC
t.utc? #=> true
t = Time.now #=> 2007-11-19 08:16:03 -0600
t.gmt? #=> false
t = Time.gm(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 UTC
t.gmt? #=> true
3414 3415 3416 3417 3418 3419 3420 3421 3422 |
# File 'time.c', line 3414
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
if (TIME_UTC_P(tobj)) return Qtrue;
return Qfalse;
}
|
- (Fixnum) gmt_offset - (Fixnum) gmtoff - (Fixnum) utc_offset
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
t.gmt_offset #=> 0
l = t.getlocal #=> 2000-01-01 14:15:01 -0600
l.gmt_offset #=> -21600
4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 |
# File 'time.c', line 4264
static VALUE
time_utc_offset(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (TIME_UTC_P(tobj)) {
return INT2FIX(0);
}
else {
return tobj->vtm.utc_offset;
}
}
|
- (Fixnum) wday
Returns an integer representing the day of the week, 0..6, with Sunday == 0.
t = Time.now #=> 2007-11-20 02:35:35 -0600
t.wday #=> 2
t.sunday? #=> false
t.monday? #=> false
t.tuesday? #=> true
t.wednesday? #=> false
t.thursday? #=> false
t.friday? #=> false
t.saturday? #=> false
4036 4037 4038 4039 4040 4041 4042 4043 4044 |
# File 'time.c', line 4036
static VALUE
time_wday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.wday);
}
|
- (Boolean) wednesday?
Returns true if time represents Wednesday.
t = Time.local(1993, 2, 24) #=> 1993-02-24 00:00:00 -0600
p t.wednesday? #=> true
4111 4112 4113 4114 4115 |
# File 'time.c', line 4111
static VALUE
time_wednesday(VALUE time)
{
wday_p(3);
}
|
- (Fixnum) yday
Returns an integer representing the day of the year, 1..366.
t = Time.now #=> 2007-11-19 08:32:31 -0600
t.yday #=> 323
4175 4176 4177 4178 4179 4180 4181 4182 4183 |
# File 'time.c', line 4175
static VALUE
time_yday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.yday);
}
|
- (Fixnum) year
Returns the year for time (including the century).
t = Time.now #=> 2007-11-19 08:27:51 -0600
t.year #=> 2007
4008 4009 4010 4011 4012 4013 4014 4015 4016 |
# File 'time.c', line 4008
static VALUE
time_year(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.year;
}
|
- (String) zone
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)
t.zone #=> "UTC"
t = Time.local(2000, "jan", 1, 20, 15, 1)
t.zone #=> "CST"
4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 |
# File 'time.c', line 4233
static VALUE
time_zone(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
if (TIME_UTC_P(tobj)) {
return rb_obj_untaint(rb_locale_str_new_cstr("UTC"));
}
if (tobj->vtm.zone == NULL)
return Qnil;
return rb_obj_untaint(rb_locale_str_new_cstr(tobj->vtm.zone));
}
|