Class: DateTime

Inherits:
Date show all
Defined in:
lib/date.rb,
lib/date.rb,
lib/date/format.rb

Overview

Class representing a date and time.

See the documentation to the file date.rb for an overview.

DateTime objects are immutable once created.

Other methods.

The following methods are defined in Date, but declared private there. They are made public in DateTime. They are documented here.

hour()

Get the hour-of-the-day of the time. This is given using the 24-hour clock, counting from midnight. The first hour after midnight is hour 0; the last hour of the day is hour 23.

min()

Get the minute-of-the-hour of the time.

sec()

Get the second-of-the-minute of the time.

sec_fraction()

Get the fraction of a second of the time. This is returned as a Rational.

zone()

Get the time zone as a String. This is representation of the time offset such as “+1000”, not the true time-zone name.

offset()

Get the time zone offset as a fraction of a day. This is returned as a Rational.

new_offset(of=0)

Create a new DateTime object, identical to the current one, except with a new time zone offset of of. of is the new offset from UTC as a fraction of a day.

Constant Summary

Constants inherited from Date

Date::ABBR_DAYNAMES, Date::ABBR_MONTHNAMES, Date::DAYNAMES, Date::ENGLAND, Date::GREGORIAN, Date::ITALY, Date::JULIAN, Date::MONTHNAMES, Date::UNIXEPOCH

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Date

#+, #-, #<<, #<=>, #===, #>>, _httpdate, _iso8601, _jisx0301, _parse, _rfc2822, _rfc3339, _xmlschema, #ajd, #amjd, #asctime, #cwday, #cweek, #cwyear, #day_fraction, #downto, #england, #eql?, #gregorian, #gregorian?, gregorian_leap?, #hash, #httpdate, #initialize, #inspect, #italy, #jd, #julian, #julian?, julian_leap?, #ld, #leap?, #marshal_dump, #marshal_load, #mday, #mjd, #mon, #new_start, #next, #next_day, #next_month, #next_year, once, #prev_day, #prev_month, #prev_year, #rfc2822, #start, #step, #to_s, today, #upto, valid_civil?, valid_commercial?, valid_jd?, valid_ordinal?, #wday, #yday, #year

Methods included from Comparable

#<, #<=, #==, #>, #>=, #between?

Constructor Details

This class inherits a constructor from Date

Class Method Details

._strptime(str, fmt = '%FT%T%z') ⇒ Object



1311
1312
1313
# File 'lib/date/format.rb', line 1311

def self._strptime(str, fmt='%FT%T%z')
  super(str, fmt)
end

.civil(y = -4712,, m = 1, d = 1, h = 0, min = 0, s = 0, of = 0, sg = ITALY) ⇒ Object Also known as: new

Create a new DateTime object corresponding to the specified Civil Date and hour h, minute min, second s.

The 24-hour clock is used. Negative values of h, min, and sec are treating as counting backwards from the end of the next larger unit (e.g. a min of -2 is treated as 58). No wraparound is performed. If an invalid time portion is specified, an ArgumentError is raised.

of is the offset from UTC as a fraction of a day (defaults to 0). sg specifies the Day of Calendar Reform.

y defaults to -4712, m to 1, and d to 1; this is Julian Day Number day 0. The time values default to 0.



1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
# File 'lib/date.rb', line 1575

def self.civil(y=-4712, m=1, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
  fr = _valid_time?(h, min, s)
  unless (jd = _valid_civil?(y, m, d, sg)) &&
  (fr)
    raise ArgumentError, 'invalid date'
  end
  if String === of
    of = (zone_to_diff(of) || 0).to_r/86400
  end
  new!(jd_to_ajd(jd, fr, of), of, sg)
end

.commercial(y = -4712,, w = 1, d = 1, h = 0, min = 0, s = 0, of = 0, sg = ITALY) ⇒ Object

Create a new DateTime object corresponding to the specified Commercial Date and hour h, minute min, second s.

The 24-hour clock is used. Negative values of h, min, and sec are treating as counting backwards from the end of the next larger unit (e.g. a min of -2 is treated as 58). No wraparound is performed. If an invalid time portion is specified, an ArgumentError is raised.

of is the offset from UTC as a fraction of a day (defaults to 0). sg specifies the Day of Calendar Reform.

y defaults to -4712, w to 1, and d to 1; this is Julian Day Number day 0. The time values default to 0.



1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
# File 'lib/date.rb', line 1604

def self.commercial(y=-4712, w=1, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
  fr = _valid_time?(h, min, s)
  unless (jd = _valid_commercial?(y, w, d, sg)) &&
  (fr)
    raise ArgumentError, 'invalid date'
  end
  if String === of
    of = (zone_to_diff(of) || 0).to_r/86400
  end
  new!(jd_to_ajd(jd, fr, of), of, sg)
end

.httpdate(str = 'Mon, 01 Jan -4712 00:00:00 GMT', sg = ITALY) ⇒ Object

:nodoc:



1722
1723
1724
1725
# File 'lib/date.rb', line 1722

def self.httpdate(str='Mon, 01 Jan -4712 00:00:00 GMT', sg=ITALY) # :nodoc:
  elem = _httpdate(str)
  new_by_frags(elem, sg)
end

.iso8601(str = '-4712-01-01T00:00:00+00:00', sg = ITALY) ⇒ Object

:nodoc:



1700
1701
1702
1703
# File 'lib/date.rb', line 1700

def self.iso8601(str='-4712-01-01T00:00:00+00:00', sg=ITALY) # :nodoc:
  elem = _iso8601(str)
  new_by_frags(elem, sg)
end

.jd(jd = 0, h = 0, min = 0, s = 0, of = 0, sg = ITALY) ⇒ Object

Create a new DateTime object corresponding to the specified Julian Day Number jd and hour h, minute min, second s.

The 24-hour clock is used. Negative values of h, min, and sec are treating as counting backwards from the end of the next larger unit (e.g. a min of -2 is treated as 58). No wraparound is performed. If an invalid time portion is specified, an ArgumentError is raised.

of is the offset from UTC as a fraction of a day (defaults to 0). sg specifies the Day of Calendar Reform.

All day/time values default to 0.



1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
# File 'lib/date.rb', line 1523

def self.jd(jd=0, h=0, min=0, s=0, of=0, sg=ITALY)
  fr = _valid_time?(h, min, s)
  unless (jd = _valid_jd?(jd, sg)) &&
  (fr)
    raise ArgumentError, 'invalid date'
  end
  if String === of
    of = (zone_to_diff(of) || 0).to_r/86400
  end
  new!(jd_to_ajd(jd, fr, of), of, sg)
end

.jisx0301(str = '-4712-01-01T00:00:00+00:00', sg = ITALY) ⇒ Object

:nodoc:



1727
1728
1729
1730
# File 'lib/date.rb', line 1727

def self.jisx0301(str='-4712-01-01T00:00:00+00:00', sg=ITALY) # :nodoc:
  elem = _jisx0301(str)
  new_by_frags(elem, sg)
end

.ordinal(y = -4712,, d = 1, h = 0, min = 0, s = 0, of = 0, sg = ITALY) ⇒ Object

Create a new DateTime object corresponding to the specified Ordinal Date and hour h, minute min, second s.

The 24-hour clock is used. Negative values of h, min, and sec are treating as counting backwards from the end of the next larger unit (e.g. a min of -2 is treated as 58). No wraparound is performed. If an invalid time portion is specified, an ArgumentError is raised.

of is the offset from UTC as a fraction of a day (defaults to 0). sg specifies the Day of Calendar Reform.

y defaults to -4712, and d to 1; this is Julian Day Number day 0. The time values default to 0.



1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
# File 'lib/date.rb', line 1549

def self.ordinal(y=-4712, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
  fr = _valid_time?(h, min, s)
  unless (jd = _valid_ordinal?(y, d, sg)) &&
  (fr)
    raise ArgumentError, 'invalid date'
  end
  if String === of
    of = (zone_to_diff(of) || 0).to_r/86400
  end
  new!(jd_to_ajd(jd, fr, of), of, sg)
end

.parse(str = '-4712-01-01T00:00:00+00:00', hints = {}, sg = ITALY) ⇒ Object

Create a new DateTime object by parsing from a String, without specifying the format.

str is a String holding a date-time representation. comp specifies whether to interpret 2-digit years as 19XX (>= 69) or 20XX (< 69); the default is not to. The method will attempt to parse a date-time from the String using various heuristics; see #_parse in date/format.rb for more details. If parsing fails, an ArgumentError will be raised.

The default str is ‘-4712-01-01T00:00:00+00:00’; this is Julian Day Number day 0.

sg specifies the Day of Calendar Reform.



1695
1696
1697
1698
# File 'lib/date.rb', line 1695

def self.parse(str='-4712-01-01T00:00:00+00:00', hints={}, sg=ITALY)
  elem = _parse(str, hints)
  new_by_frags(elem, sg)
end

.rfc2822(str = 'Mon, 1 Jan -4712 00:00:00 +0000', sg = ITALY) ⇒ Object Also known as: rfc822

:nodoc:



1715
1716
1717
1718
# File 'lib/date.rb', line 1715

def self.rfc2822(str='Mon, 1 Jan -4712 00:00:00 +0000', sg=ITALY) # :nodoc:
  elem = _rfc2822(str)
  new_by_frags(elem, sg)
end

.rfc3339(str = '-4712-01-01T00:00:00+00:00', sg = ITALY) ⇒ Object

:nodoc:



1705
1706
1707
1708
# File 'lib/date.rb', line 1705

def self.rfc3339(str='-4712-01-01T00:00:00+00:00', sg=ITALY) # :nodoc:
  elem = _rfc3339(str)
  new_by_frags(elem, sg)
end

.strptime(str = '-4712-01-01T00:00:00+00:00', fmt = '%FT%T%z', sg = ITALY) ⇒ Object

Create a new DateTime object by parsing from a String according to a specified format.

str is a String holding a date-time representation. fmt is the format that the date-time is in. See date/format.rb for details on supported formats.

The default str is ‘-4712-01-01T00:00:00+00:00’, and the default fmt is ‘%FT%T%z’. This gives midnight on Julian Day Number day 0.

sg specifies the Day of Calendar Reform.

An ArgumentError will be raised if str cannot be parsed.



1675
1676
1677
1678
# File 'lib/date.rb', line 1675

def self.strptime(str='-4712-01-01T00:00:00+00:00', fmt='%FT%T%z', sg=ITALY)
  elem = _strptime(str, fmt)
  new_by_frags(elem, sg)
end

.xmlschema(str = '-4712-01-01T00:00:00+00:00', sg = ITALY) ⇒ Object

:nodoc:



1710
1711
1712
1713
# File 'lib/date.rb', line 1710

def self.xmlschema(str='-4712-01-01T00:00:00+00:00', sg=ITALY) # :nodoc:
  elem = _xmlschema(str)
  new_by_frags(elem, sg)
end

Instance Method Details

#iso8601(n = 0) ⇒ Object



1327
1328
1329
# File 'lib/date/format.rb', line 1327

def iso8601(n=0)
  super() + iso8601_timediv(n)
end

#jisx0301(n = 0) ⇒ Object



1335
1336
1337
# File 'lib/date/format.rb', line 1335

def jisx0301(n=0)
  super() + iso8601_timediv(n)
end

#rfc3339(n = 0) ⇒ Object



1331
# File 'lib/date/format.rb', line 1331

def rfc3339(n=0) iso8601(n) end

#strftime(fmt = '%FT%T%:z') ⇒ Object



1307
1308
1309
# File 'lib/date/format.rb', line 1307

def strftime(fmt='%FT%T%:z')
  super(fmt)
end

#to_dateObject



1786
# File 'lib/date.rb', line 1786

def to_date() Date.new!(jd_to_ajd(jd, 0, 0), 0, @sg) end

#to_datetimeObject



1787
# File 'lib/date.rb', line 1787

def to_datetime() self end

#to_timeObject



1778
1779
1780
1781
1782
1783
1784
# File 'lib/date.rb', line 1778

def to_time
  d = new_offset(0)
  d.instance_eval do
    Time.utc(year(), mon(), mday(), hour(), min(), sec + sec_fraction)
  end.
	getlocal
end

#xmlschema(n = 0) ⇒ Object

:nodoc:



1333
# File 'lib/date/format.rb', line 1333

def xmlschema(n=0) iso8601(n) end