Class: Date
| Relationships & Source Files | |
| Namespace Children | |
| Classes: | |
| Extension / Inclusion / Inheritance Descendants | |
| Subclasses: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Instance Chain: 
          self,
          Comparable
         | |
| Inherits: | Object | 
| Defined in: | ext/date/date_core.c, ext/date/lib/date.rb | 
Overview
date and datetime class - Tadayoshi Funaba 1998-2011
'date' provides two classes: Date and ::Time.
Terms and Definitions
Some terms and definitions are based on ISO 8601 and JIS X 0301.
Calendar Date
The calendar date is a particular day of a calendar year, identified by its ordinal number within a calendar month within that year.
In those classes, this is so-called “civil”.
Ordinal Date
The ordinal date is a particular day of a calendar year identified by its ordinal number within the year.
In those classes, this is so-called “ordinal”.
Week Date
The week date is a date identified by calendar week and day numbers.
The calendar week is a seven day period within a calendar year, starting on a Monday and identified by its ordinal number within the year; the first calendar week of the year is the one that includes the first Thursday of that year. In the Gregorian calendar, this is equivalent to the week which includes January 4.
In those classes, this is so-called “commercial”.
Julian Day Number
The Julian day number is in elapsed days since noon (Greenwich Mean ::Time) on January 1, 4713 BCE (in the Julian calendar).
In this document, the astronomical Julian day number is the same as the original Julian day number. And the chronological Julian day number is a variation of the Julian day number. Its days begin at midnight on local time.
In this document, when the term “Julian day number” simply appears, it just refers to “chronological Julian day number”, not the original.
In those classes, those are so-called “ajd” and “jd”.
Modified Julian Day Number
The modified Julian day number is in elapsed days since midnight (Coordinated Universal Time) on November 17, 1858 CE (in the Gregorian calendar).
In this document, the astronomical modified Julian day number is the same as the original modified Julian day number. And the chronological modified Julian day number is a variation of the modified Julian day number. Its days begin at midnight on local time.
In this document, when the term “modified Julian day number” simply appears, it just refers to “chronological modified Julian day number”, not the original.
In those classes, those are so-called “amjd” and “mjd”.
Date
A subclass of ::Object that includes the Comparable module and easily handles date.
A Date object is created with .new, .jd, .ordinal, .commercial, .parse, .strptime, .today, Time#to_date, etc.
require 'date'
Date.new(2001,2,3)
 #=> #<Date: 2001-02-03 ...>
Date.jd(2451944)
 #=> #<Date: 2001-02-03 ...>
Date.ordinal(2001,34)
 #=> #<Date: 2001-02-03 ...>
Date.commercial(2001,5,6)
 #=> #<Date: 2001-02-03 ...>
Date.parse('2001-02-03')
 #=> #<Date: 2001-02-03 ...>
Date.strptime('03-02-2001', '%d-%m-%Y')
 #=> #<Date: 2001-02-03 ...>
Time.new(2001,2,3).to_date
 #=> #<Date: 2001-02-03 ...>All date objects are immutable; hence cannot modify themselves.
The concept of a date object can be represented as a tuple of the day count, the offset and the day of calendar reform.
The day count denotes the absolute position of a temporal dimension. The offset is relative adjustment, which determines decoded local time with the day count. The day of calendar reform denotes the start day of the new style. The old style of the West is the Julian calendar which was adopted by Caesar. The new style is the Gregorian calendar, which is the current civil calendar of many countries.
The day count is virtually the astronomical Julian day number. The offset in this class is usually zero, and cannot be specified directly.
A Date object can be created with an optional argument, the day of calendar reform as a Julian day number, which should be 2298874 to 2426355 or negative/positive infinity. The default value is ITALY (2299161=1582-10-15). See also sample/cal.rb.
$ ruby sample/cal.rb -c it 10 1582
    October 1582
 S  M Tu  W Th  F  S
    1  2  3  4 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
$ ruby sample/cal.rb -c gb  9 1752
   September 1752
 S  M Tu  W Th  F  S
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30A Date object has various methods. See each reference.
d = Date.parse('3rd Feb 2001')
                             #=> #<Date: 2001-02-03 ...>
d.year                       #=> 2001
d.mon                        #=> 2
d.mday                       #=> 3
d.wday                       #=> 6
d += 1                       #=> #<Date: 2001-02-04 ...>
d.strftime('%a %d %b %Y')    #=> "Sun 04 Feb 2001"Constant Summary
- 
    ABBR_DAYNAMES =
    # File 'ext/date/date_core.c', line 9212An array of strings of abbreviated day names in English. The first is “Sun”. mk_ary_of_str(7, abbr_daynames) 
- 
    ABBR_MONTHNAMES =
    # File 'ext/date/date_core.c', line 9201An array of strings of abbreviated month names in English. The first element is nil. mk_ary_of_str(13, abbr_monthnames) 
- 
    DAYNAMES =
    # File 'ext/date/date_core.c', line 9207An array of strings of the full names of days of the week in English. The first is “Sunday”. mk_ary_of_str(7, daynames) 
- 
    ENGLAND =
    # File 'ext/date/date_core.c', line 9222The Julian day number of the day of calendar reform for England and her colonies. INT2FIX(ENGLAND) 
- 
    GREGORIAN =
    # File 'ext/date/date_core.c', line 9232The Julian day number of the day of calendar reform for the proleptic Gregorian calendar. DBL2NUM(GREGORIAN) 
- 
    ITALY =
    # File 'ext/date/date_core.c', line 9217The Julian day number of the day of calendar reform for Italy and some catholic countries. INT2FIX(ITALY) 
- 
    JULIAN =
    # File 'ext/date/date_core.c', line 9227The Julian day number of the day of calendar reform for the proleptic Julian calendar. DBL2NUM(JULIAN) 
- 
    MONTHNAMES =
    # File 'ext/date/date_core.c', line 9196An array of strings of full month names in English. The first element is nil. mk_ary_of_str(13, monthnames) 
Class Method Summary
- 
    
      ._httpdate(string)  ⇒ Hash 
    
    Returns a hash of parsed elements. 
- 
    
      ._iso8601(string)  ⇒ Hash 
    
    Returns a hash of parsed elements. 
- 
    
      ._jisx0301(string)  ⇒ Hash 
    
    Returns a hash of parsed elements. 
- 
    
      ._parse(string[, comp=true])  ⇒ Hash 
    
    Parses the given representation of date and time, and returns a hash of parsed elements. 
- 
    
      ._rfc2822(string)  ⇒ Hash 
    
    Alias for ._rfc822. 
- 
    
      ._rfc3339(string)  ⇒ Hash 
    
    Returns a hash of parsed elements. 
- 
    
      ._rfc822(string)  ⇒ Hash 
      (also: ._rfc2822)
    
    Returns a hash of parsed elements. 
- 
    
      ._strptime(string[, format='%F'])  ⇒ Hash 
    
    Parses the given representation of date and time with the given template, and returns a hash of parsed elements. 
- 
    
      ._xmlschema(string)  ⇒ Hash 
    
    Returns a hash of parsed elements. 
- 
    
      .civil([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
    
    Alias for .new. 
- 
    
      .commercial([cwyear=-4712[, cweek=1[, cwday=1[, start=Date::ITALY]]]])  ⇒ Date 
    
    Creates a date object denoting the given week date. 
- 
    
      .gregorian_leap?(year)  ⇒ Boolean 
    
    Alias for .leap?. 
- 
    
      .httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY])  ⇒ Date 
    
    Creates a new Dateobject by parsing from a string according to some RFC 2616 format.
- 
    
      .iso8601(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date 
    
    Creates a new Dateobject by parsing from a string according to some typical ISO 8601 formats.
- 
    
      .jd([jd=0[, start=Date::ITALY]])  ⇒ Date 
    
    Creates a date object denoting the given chronological Julian day number. 
- 
    
      .jisx0301(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date 
    
    Creates a new Dateobject by parsing from a string according to some typical JIS X 0301 formats.
- 
    
      .julian_leap?(year)  ⇒ Boolean 
    
    Returns true if the given year is a leap year of the proleptic Julian calendar. 
- 
    
      .leap?(year)  ⇒ Boolean 
      (also: .gregorian_leap?)
    
    Returns true if the given year is a leap year of the proleptic Gregorian calendar. 
- 
    
      .new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
      (also: .civil)
    
    constructor
    Creates a date object denoting the given calendar date. 
- 
    
      .ordinal([year=-4712[, yday=1[, start=Date::ITALY]]])  ⇒ Date 
    
    Creates a date object denoting the given ordinal date. 
- 
    
      .parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]])  ⇒ Date 
    
    Parses the given representation of date and time, and creates a date object. 
- 
    
      .rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
    
    Alias for .rfc822. 
- 
    
      .rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY])  ⇒ Date 
    
    Creates a new Dateobject by parsing from a string according to some typical RFC 3339 formats.
- 
    
      .rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
      (also: .rfc2822)
    
    Creates a new Dateobject by parsing from a string according to some typical RFC 2822 formats.
- 
    
      .strptime([string='-4712-01-01'[, format='%F'[, start=Date::ITALY]]])  ⇒ Date 
    
    Parses the given representation of date and time with the given template, and creates a date object. 
- 
    
      .today([start = Date::ITALY])  ⇒ Date 
    
    Creates a date object denoting the present day. 
- 
    
      .valid_civil?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
    
    Alias for .valid_date?. 
- 
    
      .valid_commercial?(cwyear, cweek, cwday[, start=Date::ITALY])  ⇒ Boolean 
    
    Returns true if the given week date is valid, and false if not. 
- 
    
      .valid_date?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
      (also: .valid_civil?)
    
    Returns true if the given calendar date is valid, and false if not. 
- 
    
      .valid_jd?(jd[, start=Date::ITALY])  ⇒ Boolean 
    
    Just returns true. 
- 
    
      .valid_ordinal?(year, yday[, start=Date::ITALY])  ⇒ Boolean 
    
    Returns true if the given ordinal date is valid, and false if not. 
- 
    
      .xmlschema(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date 
    
    Creates a new Dateobject by parsing from a string according to some typical XML Schema formats.
- ._load(s) Internal use only
Instance Attribute Summary
- 
    
      #friday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Friday. 
- 
    
      #gregorian  ⇒ Date 
    
    readonly
    This method is equivalent to new_start(Date::GREGORIAN). 
- 
    
      #gregorian?  ⇒ Boolean 
    
    readonly
    Returns true if the date is on or after the day of calendar reform. 
- 
    
      #julian  ⇒ Date 
    
    readonly
    This method is equivalent to new_start(Date::JULIAN). 
- 
    
      #julian?  ⇒ Boolean 
    
    readonly
    Returns true if the date is before the day of calendar reform. 
- 
    
      #leap?  ⇒ Boolean 
    
    readonly
    Returns true if the year is a leap year. 
- 
    
      #monday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Monday. 
- 
    
      #saturday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Saturday. 
- 
    
      #sunday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Sunday. 
- 
    
      #thursday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Thursday. 
- 
    
      #tuesday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Tuesday. 
- 
    
      #wednesday?  ⇒ Boolean 
    
    readonly
    Returns true if the date is Wednesday. 
Instance Method Summary
- 
    
      #+(other)  ⇒ Date 
    
    Returns a date object pointing otherdays after self.
- 
    
      #-(other)  ⇒ Date, Rational 
    
    Returns the difference between the two dates if the other is a date object. 
- 
    
      #<<(n)  ⇒ Date 
    
    Returns a date object pointing nmonths before self.
- 
    
      #<=>(other)  ⇒ 1, ... 
    
    Compares the two dates and returns -1, zero, 1 or nil. 
- 
    
      #===(other)  ⇒ Boolean 
    
    Returns true if they are the same day. 
- 
    
      #>>(n)  ⇒ Date 
    
    Returns a date object pointing nmonths after self.
- 
    
      #ajd  ⇒ Rational 
    
    Returns the astronomical Julian day number. 
- 
    
      #amjd  ⇒ Rational 
    
    Returns the astronomical modified Julian day number. 
- 
    
      #asctime  ⇒ String 
    
    Alias for #ctime. 
- 
    
      #ctime  ⇒ String 
      (also: #asctime)
    
    Returns a string in asctime(3) format (but without “n0” at the end). 
- 
    
      #cwday  ⇒ Fixnum 
    
    Returns the day of calendar week (1-7, Monday is 1). 
- 
    
      #cweek  ⇒ Fixnum 
    
    Returns the calendar week number (1-53). 
- 
    
      #cwyear  ⇒ Integer 
    
    Returns the calendar week based year. 
- 
    
      #day  ⇒ Fixnum 
      (also: #mday)
    
    Returns the day of the month (1-31). 
- 
    
      #day_fraction  ⇒ Rational 
    
    Returns the fractional part of the day. 
- 
    
      #downto(min)  ⇒ Enumerator 
    
    This method is equivalent to step(min, -1){|date| …}. 
- 
    
      #england  ⇒ Date 
    
    This method is equivalent to new_start(Date::ENGLAND). 
- 
    
      #httpdate  ⇒ String 
    
    This method is equivalent to strftime('%a, %d %b %Y %T GMT'). 
- 
    
      #inspect  ⇒ String 
    
    Returns the value as a string for inspection. 
- 
    
      #iso8601  ⇒ String 
      (also: #xmlschema)
    
    This method is equivalent to strftime('%F'). 
- 
    
      #italy  ⇒ Date 
    
    This method is equivalent to new_start(Date::ITALY). 
- 
    
      #jd  ⇒ Integer 
    
    Returns the Julian day number. 
- 
    
      #jisx0301  ⇒ String 
    
    Returns a string in a JIS X 0301 format. 
- 
    
      #ld  ⇒ Integer 
    
    Returns the Lilian day number. 
- 
    
      #mday  ⇒ Fixnum 
    
    Alias for #day. 
- 
    
      #mjd  ⇒ Integer 
    
    Returns the modified Julian day number. 
- 
    
      #mon  ⇒ Fixnum 
      (also: #month)
    
    Returns the month (1-12). 
- 
    
      #month  ⇒ Fixnum 
    
    Alias for #mon. 
- 
    
      #new_start([start = Date::ITALY])  ⇒ Date 
    
    Duplicates self and resets its day of calendar reform. 
- 
    
      #next  ⇒ Date 
      (also: #succ)
    
    Returns a date object denoting the following day. 
- 
    
      #next_day([n = 1])  ⇒ Date 
    
    This method is equivalent to d + n. 
- 
    
      #next_month([n = 1])  ⇒ Date 
    
    This method is equivalent to d >> n. 
- 
    
      #next_year([n = 1])  ⇒ Date 
    
    This method is equivalent to d >> (n * 12). 
- 
    
      #prev_day([n = 1])  ⇒ Date 
    
    This method is equivalent to d - n. 
- 
    
      #prev_month([n = 1])  ⇒ Date 
    
    This method is equivalent to d << n. 
- 
    
      #prev_year([n = 1])  ⇒ Date 
    
    This method is equivalent to d << (n * 12). 
- 
    
      #rfc2822  ⇒ String 
    
    Alias for #rfc822. 
- 
    
      #rfc3339  ⇒ String 
    
    This method is equivalent to strftime('%FT%T%:z'). 
- 
    
      #rfc822  ⇒ String 
      (also: #rfc2822)
    
    This method is equivalent to strftime('%a, %-d %b %Y %T %z'). 
- 
    
      #start  ⇒ Float 
    
    Returns the Julian day number denoting the day of calendar reform. 
- 
    
      #step(limit[, step=1])  ⇒ Enumerator 
    
    Iterates evaluation of the given block, which takes a date object. 
- 
    
      #strftime([format = '%F'])  ⇒ String 
    
    Formats date according to the directives in the given format string. 
- 
    
      #succ  ⇒ Date 
    
    Alias for #next. 
- 
    
      #to_date  ⇒ self 
    
    Returns self. 
- 
    
      #to_datetime  ⇒ Date 
    
    Returns a ::Time object which denotes self. 
- 
    
      #to_s  ⇒ String 
    
    Returns a string in an ISO 8601 format. 
- 
    
      #to_time  ⇒ Time 
    
    Returns a ::Time object which denotes self. 
- 
    
      #upto(max)  ⇒ Enumerator 
    
    This method is equivalent to step(max, 1){|date| …}. 
- 
    
      #wday  ⇒ Fixnum 
    
    Returns the day of week (0-6, Sunday is zero). 
- 
    
      #xmlschema  ⇒ String 
    
    Alias for #iso8601. 
- 
    
      #yday  ⇒ Fixnum 
    
    Returns the day of the year (1-366). 
- 
    
      #year  ⇒ Integer 
    
    Returns the year. 
- 
    
      #hour  ⇒ Fixnum 
    
    private
    Returns the hour (0-23). 
- 
    
      #min  ⇒ Fixnum 
      (also: #minute)
    
    private
    Returns the minute (0-59). 
- 
    
      #minute  ⇒ Fixnum 
    
    private
    Alias for #min. 
- 
    
      #new_offset([offset = 0])  ⇒ Date 
    
    private
    Duplicates self and resets its offset. 
- 
    
      #offset  ⇒ Rational 
    
    private
    Returns the offset. 
- 
    
      #sec  ⇒ Fixnum 
      (also: #second)
    
    private
    Returns the second (0-59). 
- 
    
      #sec_fraction  ⇒ Rational 
      (also: #second_fraction)
    
    private
    Returns the fractional part of the second. 
- 
    
      #second  ⇒ Fixnum 
    
    private
    Alias for #sec. 
- 
    
      #second_fraction  ⇒ Rational 
    
    private
    Alias for #sec_fraction. 
- 
    
      #zone  ⇒ String 
    
    private
    Returns the timezone. 
- #eql?(other) ⇒ Boolean Internal use only
- #hash Internal use only
- #initialize_copy(date) Internal use only
- #marshal_dump Internal use only
- #marshal_load(a) Internal use only
Constructor Details
    
      .civil([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
      .new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
    
    Also known as: .civil
  
Date 
      .new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
    Creates a date object denoting the given calendar date.
In this class, BCE years are counted astronomically. Thus, the year before the year 1 is the year zero, and the year preceding the year zero is the year -1. The month and the day of month should be a negative or a positive number (as a relative month/day from the end of year/month when negative). They should not be zero.
The last argument should be a Julian day number which denotes the day of calendar reform. ITALY (2299161=1582-10-15), ENGLAND (2361222=1752-09-14), GREGORIAN (the proleptic Gregorian calendar) and JULIAN (the proleptic Julian calendar) can be specified as a day of calendar reform.
Date.new(2001)            #=> #<Date: 2001-01-01 ...>
Date.new(2001,2,3)        #=> #<Date: 2001-02-03 ...>
Date.new(2001,2,-1)       #=> #<Date: 2001-02-28 ...>See also .jd.
# File 'ext/date/date_core.c', line 3385
static VALUE
date_s_civil(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vm, vd, vsg, y, fr, fr2, ret;
    int m, d;
    double sg;
    rb_scan_args(argc, argv, "04", &vy, &vm, &vd, &vsg);
    y = INT2FIX(-4712);
    m = 1;
    d = 1;
    fr2 = INT2FIX(0);
    sg = DEFAULT_SG;
    switch (argc) {
      case 4:
	val2sg(vsg, sg);
      case 3:
	num2int_with_frac(d, positive_inf);
      case 2:
	m = NUM2INT(vm);
      case 1:
	y = vy;
    }
    if (guess_style(y, sg) < 0) {
	VALUE nth;
	int ry, rm, rd;
	if (!valid_gregorian_p(y, m, d,
			       &nth, &ry,
			       &rm, &rd))
	    rb_raise(rb_eArgError, "invalid date");
	ret = d_simple_new_internal(klass,
				    nth, 0,
				    sg,
				    ry, rm, rd,
				    HAVE_CIVIL);
    }
    else {
	VALUE nth;
	int ry, rm, rd, rjd, ns;
	if (!valid_civil_p(y, m, d, sg,
			   &nth, &ry,
			   &rm, &rd, &rjd,
			   &ns))
	    rb_raise(rb_eArgError, "invalid date");
	ret = d_simple_new_internal(klass,
				    nth, rjd,
				    sg,
				    ry, rm, rd,
				    HAVE_JD | HAVE_CIVIL);
    }
    add_frac();
    return ret;
}
  Class Method Details
    ._httpdate(string)  ⇒ Hash   
Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4564
static VALUE
date_s__httpdate(VALUE klass, VALUE str)
{
    return date__httpdate(str);
}
  
    ._iso8601(string)  ⇒ Hash   
Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4395
static VALUE
date_s__iso8601(VALUE klass, VALUE str)
{
    return date__iso8601(str);
}
  
    ._jisx0301(string)  ⇒ Hash   
Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4606
static VALUE
date_s__jisx0301(VALUE klass, VALUE str)
{
    return date__jisx0301(str);
}
  ._load(s)
# File 'ext/date/date_core.c', line 7187
static VALUE
date_s__load(VALUE klass, VALUE s)
{
    VALUE a, obj;
    a = rb_marshal_load(s);
    obj = d_lite_s_alloc(klass);
    return d_lite_marshal_load(obj, a);
}
  
    ._parse(string[, comp=true])  ⇒ Hash   
Parses the given representation of date and time, and returns a hash of parsed elements. This method does not function as a validator.
If the optional second argument is true and the detected year is in the range “00” to “99”, considers the year a 2-digit form and makes it full.
Date._parse('2001-02-03') #=> {:year=>2001, :mon=>2, :mday=>3}# File 'ext/date/date_core.c', line 4335
static VALUE
date_s__parse(int argc, VALUE *argv, VALUE klass)
{
    return date_s__parse_internal(argc, argv, klass);
}
  
    
      ._rfc2822(string)  ⇒ Hash 
      ._rfc822(string)  ⇒ Hash 
    
  
Hash 
      ._rfc822(string)  ⇒ Hash 
    Alias for ._rfc822.
    ._rfc3339(string)  ⇒ Hash   
Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4438
static VALUE
date_s__rfc3339(VALUE klass, VALUE str)
{
    return date__rfc3339(str);
}
  
    
      ._rfc2822(string)  ⇒ Hash 
      ._rfc822(string)  ⇒ Hash 
    
    Also known as: ._rfc2822
  
Hash 
      ._rfc822(string)  ⇒ Hash 
    Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4521
static VALUE
date_s__rfc2822(VALUE klass, VALUE str)
{
    return date__rfc2822(str);
}
  
    ._strptime(string[, format='%F'])  ⇒ Hash   
Parses the given representation of date and time with the given template, and returns a hash of parsed elements. _strptime does not support specification of flags and width unlike strftime.
Date._strptime('2001-02-03', '%Y-%m-%d')
                          #=> {:year=>2001, :mon=>2, :mday=>3}See also strptime(3) and #strftime.
# File 'ext/date/date_core.c', line 4241
static VALUE
date_s__strptime(int argc, VALUE *argv, VALUE klass)
{
    return date_s__strptime_internal(argc, argv, klass, "%F");
}
  
    ._xmlschema(string)  ⇒ Hash   
Returns a hash of parsed elements.
# File 'ext/date/date_core.c', line 4479
static VALUE
date_s__xmlschema(VALUE klass, VALUE str)
{
    return date__xmlschema(str);
}
  
    
      .civil([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
      .new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
    
  
Date 
      .new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]])  ⇒ Date 
    Alias for .new.
    .commercial([cwyear=-4712[, cweek=1[, cwday=1[, start=Date::ITALY]]]])  ⇒ Date   
Creates a date object denoting the given week date.
The week and the day of week should be a negative or a positive number (as a relative week/day from the end of year/week when negative). They should not be zero.
Date.commercial(2001)     #=> #<Date: 2001-01-01 ...>
Date.commercial(2002)     #=> #<Date: 2001-12-31 ...>
Date.commercial(2001,5,6) #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 3462
static VALUE
date_s_commercial(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vw, vd, vsg, y, fr, fr2, ret;
    int w, d;
    double sg;
    rb_scan_args(argc, argv, "04", &vy, &vw, &vd, &vsg);
    y = INT2FIX(-4712);
    w = 1;
    d = 1;
    fr2 = INT2FIX(0);
    sg = DEFAULT_SG;
    switch (argc) {
      case 4:
	val2sg(vsg, sg);
      case 3:
	num2int_with_frac(d, positive_inf);
      case 2:
	w = NUM2INT(vw);
      case 1:
	y = vy;
    }
    {
	VALUE nth;
	int ry, rw, rd, rjd, ns;
	if (!valid_commercial_p(y, w, d, sg,
				&nth, &ry,
				&rw, &rd, &rjd,
				&ns))
	    rb_raise(rb_eArgError, "invalid date");
	ret = d_simple_new_internal(klass,
				    nth, rjd,
				    sg,
				    0, 0, 0,
				    HAVE_JD);
    }
    add_frac();
    return ret;
}
  
    
      .gregorian_leap?(year)  ⇒ Boolean 
      .leap?(year)  ⇒ Boolean 
    
  
Boolean 
      .leap?(year)  ⇒ Boolean 
    Alias for .leap?.
    .httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY])  ⇒ Date   
Creates a new Date object by parsing from a string according to some RFC 2616 format.
Date.httpdate('Sat, 03 Feb 2001 00:00:00 GMT')
                                          #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4580
static VALUE
date_s_httpdate(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("Mon, 01 Jan -4712 00:00:00 GMT");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__httpdate(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    .iso8601(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date   
Creates a new Date object by parsing from a string according to some typical ISO 8601 formats.
Date.iso8601('2001-02-03')        #=> #<Date: 2001-02-03 ...>
Date.iso8601('20010203')          #=> #<Date: 2001-02-03 ...>
Date.iso8601('2001-W05-6')        #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4412
static VALUE
date_s_iso8601(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__iso8601(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    .jd([jd=0[, start=Date::ITALY]])  ⇒ Date   
Creates a date object denoting the given chronological Julian day number.
Date.jd(2451944)          #=> #<Date: 2001-02-03 ...>
Date.jd(2451945)          #=> #<Date: 2001-02-04 ...>
Date.jd(0)                #=> #<Date: -4712-01-01 ...>See also .new.
# File 'ext/date/date_core.c', line 3267
static VALUE
date_s_jd(int argc, VALUE *argv, VALUE klass)
{
    VALUE vjd, vsg, jd, fr, fr2, ret;
    double sg;
    rb_scan_args(argc, argv, "02", &vjd, &vsg);
    jd = INT2FIX(0);
    fr2 = INT2FIX(0);
    sg = DEFAULT_SG;
    switch (argc) {
      case 2:
	val2sg(vsg, sg);
      case 1:
	num2num_with_frac(jd, positive_inf);
    }
    {
	VALUE nth;
	int rjd;
	decode_jd(jd, &nth, &rjd);
	ret = d_simple_new_internal(klass,
				    nth, rjd,
				    sg,
				    0, 0, 0,
				    HAVE_JD);
    }
    add_frac();
    return ret;
}
  
    .jisx0301(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date   
Creates a new Date object by parsing from a string according to some typical JIS X 0301 formats.
Date.jisx0301('H13.02.03')                #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4621
static VALUE
date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__jisx0301(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    .julian_leap?(year)  ⇒ Boolean   
Returns true if the given year is a leap year of the proleptic Julian calendar.
Date.julian_leap?(1900)           #=> true
Date.julian_leap?(1901)           #=> false# File 'ext/date/date_core.c', line 2902
static VALUE
date_s_julian_leap_p(VALUE klass, VALUE y)
{
    VALUE nth;
    int ry;
    decode_year(y, +1, &nth, &ry);
    return f_boolcast(c_julian_leap_p(ry));
}
  
    
      .gregorian_leap?(year)  ⇒ Boolean 
      .leap?(year)  ⇒ Boolean 
    
    Also known as: .gregorian_leap?
  
Boolean 
      .leap?(year)  ⇒ Boolean 
    Returns true if the given year is a leap year of the proleptic Gregorian calendar.
Date.gregorian_leap?(1900)        #=> false
Date.gregorian_leap?(2000)        #=> true# File 'ext/date/date_core.c', line 2923
static VALUE
date_s_gregorian_leap_p(VALUE klass, VALUE y)
{
    VALUE nth;
    int ry;
    decode_year(y, -1, &nth, &ry);
    return f_boolcast(c_gregorian_leap_p(ry));
}
  
    .ordinal([year=-4712[, yday=1[, start=Date::ITALY]]])  ⇒ Date   
Creates a date object denoting the given ordinal date.
The day of year should be a negative or a positive number (as a relative day from the end of year when negative). It should not be zero.
Date.ordinal(2001)        #=> #<Date: 2001-01-01 ...>
Date.ordinal(2001,34)     #=> #<Date: 2001-02-03 ...>
Date.ordinal(2001,-1)     #=> #<Date: 2001-12-31 ...># File 'ext/date/date_core.c', line 3317
static VALUE
date_s_ordinal(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vd, vsg, y, fr, fr2, ret;
    int d;
    double sg;
    rb_scan_args(argc, argv, "03", &vy, &vd, &vsg);
    y = INT2FIX(-4712);
    d = 1;
    fr2 = INT2FIX(0);
    sg = DEFAULT_SG;
    switch (argc) {
      case 3:
	val2sg(vsg, sg);
      case 2:
	num2int_with_frac(d, positive_inf);
      case 1:
	y = vy;
    }
    {
	VALUE nth;
	int ry, rd, rjd, ns;
	if (!valid_ordinal_p(y, d, sg,
			     &nth, &ry,
			     &rd, &rjd,
			     &ns))
	    rb_raise(rb_eArgError, "invalid date");
	ret = d_simple_new_internal(klass,
				     nth, rjd,
				     sg,
				     0, 0, 0,
				     HAVE_JD);
    }
    add_frac();
    return ret;
}
  
    .parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]])  ⇒ Date   
Parses the given representation of date and time, and creates a date object. This method does not function as a validator.
If the optional second argument is true and the detected year is in the range “00” to “99”, considers the year a 2-digit form and makes it full.
Date.parse('2001-02-03')          #=> #<Date: 2001-02-03 ...>
Date.parse('20010203')            #=> #<Date: 2001-02-03 ...>
Date.parse('3rd Feb 2001')        #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4356
static VALUE
date_s_parse(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, comp, sg;
    rb_scan_args(argc, argv, "03", &str, &comp, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01");
      case 1:
	comp = Qtrue;
      case 2:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE argv2[2], hash;
	argv2[0] = str;
	argv2[1] = comp;
	hash = date_s__parse(2, argv2, klass);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    
      .rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
      .rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
    
  
Date 
      .rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
    Alias for .rfc822.
    .rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY])  ⇒ Date   
Creates a new Date object by parsing from a string according to some typical RFC 3339 formats.
Date.rfc3339('2001-02-03T04:05:06+07:00') #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4453
static VALUE
date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01T00:00:00+00:00");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__rfc3339(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    
      .rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
      .rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
    
    Also known as: .rfc2822
  
Date 
      .rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY])  ⇒ Date 
    Creates a new Date object by parsing from a string according to some typical RFC 2822 formats.
Date.rfc2822('Sat, 3 Feb 2001 00:00:00 +0000')
                                          #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4538
static VALUE
date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("Mon, 1 Jan -4712 00:00:00 +0000");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__rfc2822(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    .strptime([string='-4712-01-01'[, format='%F'[, start=Date::ITALY]]])  ⇒ Date   
Parses the given representation of date and time with the given template, and creates a date object. strptime does not support specification of flags and width unlike strftime.
Date.strptime('2001-02-03', '%Y-%m-%d')   #=> #<Date: 2001-02-03 ...>
Date.strptime('03-02-2001', '%d-%m-%Y')   #=> #<Date: 2001-02-03 ...>
Date.strptime('2001-034', '%Y-%j')        #=> #<Date: 2001-02-03 ...>
Date.strptime('2001-W05-6', '%G-W%V-%u')  #=> #<Date: 2001-02-03 ...>
Date.strptime('2001 04 6', '%Y %U %w')    #=> #<Date: 2001-02-03 ...>
Date.strptime('2001 05 6', '%Y %W %u')    #=> #<Date: 2001-02-03 ...>
Date.strptime('sat3feb01', '%a%d%b%y')    #=> #<Date: 2001-02-03 ...>See also strptime(3) and #strftime.
# File 'ext/date/date_core.c', line 4265
static VALUE
date_s_strptime(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, fmt, sg;
    rb_scan_args(argc, argv, "03", &str, &fmt, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01");
      case 1:
	fmt = rb_str_new2("%F");
      case 2:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE argv2[2], hash;
	argv2[0] = str;
	argv2[1] = fmt;
	hash = date_s__strptime(2, argv2, klass);
	return d_new_by_frags(klass, hash, sg);
    }
}
  
    .today([start = Date::ITALY])  ⇒ Date   
Creates a date object denoting the present day.
Date.today   #=> #<Date: 2011-06-11 ...># File 'ext/date/date_core.c', line 3638
static VALUE
date_s_today(int argc, VALUE *argv, VALUE klass)
{
    VALUE vsg, nth, ret;
    double sg;
    time_t t;
    struct tm tm;
    int y, ry, m, d;
    rb_scan_args(argc, argv, "01", &vsg);
    if (argc < 1)
	sg = DEFAULT_SG;
    else
	val2sg(vsg, sg);
    if (time(&t) == -1)
	rb_sys_fail("time");
    tzset();
    if (!localtime_r(&t, &tm))
	rb_sys_fail("localtime");
    y = tm.tm_year + 1900;
    m = tm.tm_mon + 1;
    d = tm.tm_mday;
    decode_year(INT2FIX(y), -1, &nth, &ry);
    ret = d_simple_new_internal(klass,
				nth, 0,
				GREGORIAN,
				ry, m, d,
				HAVE_CIVIL);
    {
	get_d1(ret);
	set_sg(dat, sg);
    }
    return ret;
}
  
    
      .valid_civil?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
      .valid_date?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
    
  
Boolean 
      .valid_date?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
    Alias for .valid_date?.
    .valid_commercial?(cwyear, cweek, cwday[, start=Date::ITALY])  ⇒ Boolean   
Returns true if the given week date is valid, and false if not.
Date.valid_commercial?(2001,5,6)  #=> true
Date.valid_commercial?(2001,5,8)  #=> falseSee also .jd and .commercial.
# File 'ext/date/date_core.c', line 2719
static VALUE
date_s_valid_commercial_p(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vw, vd, vsg;
    VALUE argv2[4];
    rb_scan_args(argc, argv, "31", &vy, &vw, &vd, &vsg);
    argv2[0] = vy;
    argv2[1] = vw;
    argv2[2] = vd;
    if (argc < 4)
	argv2[3] = INT2FIX(DEFAULT_SG);
    else
	argv2[3] = vsg;
    if (NIL_P(valid_commercial_sub(4, argv2, klass, 0)))
	return Qfalse;
    return Qtrue;
}
  
    
      .valid_civil?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
      .valid_date?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
    
    Also known as: .valid_civil?
  
Boolean 
      .valid_date?(year, month, mday[, start=Date::ITALY])  ⇒ Boolean 
    # File 'ext/date/date_core.c', line 2556
static VALUE
date_s_valid_civil_p(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vm, vd, vsg;
    VALUE argv2[4];
    rb_scan_args(argc, argv, "31", &vy, &vm, &vd, &vsg);
    argv2[0] = vy;
    argv2[1] = vm;
    argv2[2] = vd;
    if (argc < 4)
	argv2[3] = INT2FIX(DEFAULT_SG);
    else
	argv2[3] = vsg;
    if (NIL_P(valid_civil_sub(4, argv2, klass, 0)))
	return Qfalse;
    return Qtrue;
}
  
    .valid_jd?(jd[, start=Date::ITALY])  ⇒ Boolean   
Just returns true. It's nonsense, but is for symmetry.
Date.valid_jd?(2451944)           #=> trueSee also .jd.
# File 'ext/date/date_core.c', line 2467
static VALUE
date_s_valid_jd_p(int argc, VALUE *argv, VALUE klass)
{
    VALUE vjd, vsg;
    VALUE argv2[2];
    rb_scan_args(argc, argv, "11", &vjd, &vsg);
    argv2[0] = vjd;
    if (argc < 2)
	argv2[1] = INT2FIX(DEFAULT_SG);
    else
	argv2[1] = vsg;
    if (NIL_P(valid_jd_sub(2, argv2, klass, 0)))
	return Qfalse;
    return Qtrue;
}
  
    .valid_ordinal?(year, yday[, start=Date::ITALY])  ⇒ Boolean   
# File 'ext/date/date_core.c', line 2637
static VALUE
date_s_valid_ordinal_p(int argc, VALUE *argv, VALUE klass)
{
    VALUE vy, vd, vsg;
    VALUE argv2[3];
    rb_scan_args(argc, argv, "21", &vy, &vd, &vsg);
    argv2[0] = vy;
    argv2[1] = vd;
    if (argc < 3)
	argv2[2] = INT2FIX(DEFAULT_SG);
    else
	argv2[2] = vsg;
    if (NIL_P(valid_ordinal_sub(3, argv2, klass, 0)))
	return Qfalse;
    return Qtrue;
}
  
    .xmlschema(string='-4712-01-01'[, start=Date::ITALY])  ⇒ Date   
Creates a new Date object by parsing from a string according to some typical XML Schema formats.
Date.xmlschema('2001-02-03')      #=> #<Date: 2001-02-03 ...># File 'ext/date/date_core.c', line 4494
static VALUE
date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
{
    VALUE str, sg;
    rb_scan_args(argc, argv, "02", &str, &sg);
    switch (argc) {
      case 0:
	str = rb_str_new2("-4712-01-01");
      case 1:
	sg = INT2FIX(DEFAULT_SG);
    }
    {
	VALUE hash = date_s__xmlschema(klass, str);
	return d_new_by_frags(klass, hash, sg);
    }
}
  Instance Attribute Details
    #friday?  ⇒ Boolean  (readonly)  
Returns true if the date is Friday.
# File 'ext/date/date_core.c', line 5120
static VALUE
d_lite_friday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 5);
}
  
    #gregorian  ⇒ Date  (readonly)  
This method is equivalent to new_start(Date::GREGORIAN).
# File 'ext/date/date_core.c', line 5445
static VALUE
d_lite_gregorian(VALUE self)
{
    return dup_obj_with_new_start(self, GREGORIAN);
}
  
    #gregorian?  ⇒ Boolean  (readonly)  
# File 'ext/date/date_core.c', line 5278
static VALUE
d_lite_gregorian_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_gregorian_p(dat));
}
  
    #julian  ⇒ Date  (readonly)  
This method is equivalent to new_start(Date::JULIAN).
# File 'ext/date/date_core.c', line 5433
static VALUE
d_lite_julian(VALUE self)
{
    return dup_obj_with_new_start(self, JULIAN);
}
  
    #julian?  ⇒ Boolean  (readonly)  
# File 'ext/date/date_core.c', line 5262
static VALUE
d_lite_julian_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_julian_p(dat));
}
  
    #leap?  ⇒ Boolean  (readonly)  
# File 'ext/date/date_core.c', line 5294
static VALUE
d_lite_leap_p(VALUE self)
{
    int rjd, ns, ry, rm, rd;
    get_d1(self);
    if (m_gregorian_p(dat))
	return f_boolcast(c_gregorian_leap_p(m_year(dat)));
    c_civil_to_jd(m_year(dat), 3, 1, m_virtual_sg(dat),
		  &rjd, &ns);
    c_jd_to_civil(rjd - 1, m_virtual_sg(dat), &ry, &rm, &rd);
    return f_boolcast(rd == 29);
}
  
    #monday?  ⇒ Boolean  (readonly)  
Returns true if the date is Monday.
# File 'ext/date/date_core.c', line 5068
static VALUE
d_lite_monday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 1);
}
  
    #saturday?  ⇒ Boolean  (readonly)  
Returns true if the date is Saturday.
# File 'ext/date/date_core.c', line 5133
static VALUE
d_lite_saturday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 6);
}
  
    #sunday?  ⇒ Boolean  (readonly)  
Returns true if the date is Sunday.
# File 'ext/date/date_core.c', line 5055
static VALUE
d_lite_sunday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 0);
}
  
    #thursday?  ⇒ Boolean  (readonly)  
Returns true if the date is Thursday.
# File 'ext/date/date_core.c', line 5107
static VALUE
d_lite_thursday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 4);
}
  
    #tuesday?  ⇒ Boolean  (readonly)  
Returns true if the date is Tuesday.
# File 'ext/date/date_core.c', line 5081
static VALUE
d_lite_tuesday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 2);
}
  
    #wednesday?  ⇒ Boolean  (readonly)  
Returns true if the date is Wednesday.
# File 'ext/date/date_core.c', line 5094
static VALUE
d_lite_wednesday_p(VALUE self)
{
    get_d1(self);
    return f_boolcast(m_wday(dat) == 3);
}
  Instance Method Details
    #+(other)  ⇒ Date   
Returns a date object pointing other days after self.  The other should be a numeric value.  If the other is a fractional number, assumes its precision is at most nanosecond.
Date.new(2001,2,3) + 1    #=> #<Date: 2001-02-04 ...>
DateTime.new(2001,2,3) + Rational(1,2)
                          #=> #<DateTime: 2001-02-03T12:00:00+00:00 ...>
DateTime.new(2001,2,3) + Rational(-1,2)
                          #=> #<DateTime: 2001-02-02T12:00:00+00:00 ...>
DateTime.jd(0,12) + DateTime.new(2001,2,3).ajd
                          #=> #<DateTime: 2001-02-03T00:00:00+00:00 ...># File 'ext/date/date_core.c', line 5513
static VALUE
d_lite_plus(VALUE self, VALUE other)
{
    get_d1(self);
    switch (TYPE(other)) {
      case T_FIXNUM:
	{
	    VALUE nth;
	    long t;
	    int jd;
	    nth = m_nth(dat);
	    t = FIX2LONG(other);
	    if (DIV(t, CM_PERIOD)) {
		nth = f_add(nth, INT2FIX(DIV(t, CM_PERIOD)));
		t = MOD(t, CM_PERIOD);
	    }
	    if (!t)
		jd = m_jd(dat);
	    else {
		jd = m_jd(dat) + (int)t;
		canonicalize_jd(nth, jd);
	    }
	    if (simple_dat_p(dat))
		return d_simple_new_internal(rb_obj_class(self),
					     nth, jd,
					     dat->s.sg,
					     0, 0, 0,
					     (dat->s.flags | HAVE_JD) &
					     ~HAVE_CIVIL);
	    else
		return d_complex_new_internal(rb_obj_class(self),
					      nth, jd,
					      dat->c.df, dat->c.sf,
					      dat->c.of, dat->c.sg,
					      0, 0, 0,
#ifndef USE_PACK
					      dat->c.hour,
					      dat->c.min,
					      dat->c.sec,
#else
					      EX_HOUR(dat->c.pc),
					      EX_MIN(dat->c.pc),
					      EX_SEC(dat->c.pc),
#endif
					      (dat->c.flags | HAVE_JD) &
					      ~HAVE_CIVIL);
	}
	break;
      case T_BIGNUM:
	{
	    VALUE nth;
	    int jd, s;
	    if (f_positive_p(other))
		s = +1;
	    else {
		s = -1;
		other = f_negate(other);
	    }
	    nth = f_idiv(other, INT2FIX(CM_PERIOD));
	    jd = FIX2INT(f_mod(other, INT2FIX(CM_PERIOD)));
	    if (s < 0) {
		nth = f_negate(nth);
		jd = -jd;
	    }
	    if (!jd)
		jd = m_jd(dat);
	    else {
		jd = m_jd(dat) + jd;
		canonicalize_jd(nth, jd);
	    }
	    if (f_zero_p(nth))
		nth = m_nth(dat);
	    else
		nth = f_add(m_nth(dat), nth);
	    if (simple_dat_p(dat))
		return d_simple_new_internal(rb_obj_class(self),
					     nth, jd,
					     dat->s.sg,
					     0, 0, 0,
					     (dat->s.flags | HAVE_JD) &
					     ~HAVE_CIVIL);
	    else
		return d_complex_new_internal(rb_obj_class(self),
					      nth, jd,
					      dat->c.df, dat->c.sf,
					      dat->c.of, dat->c.sg,
					      0, 0, 0,
#ifndef USE_PACK
					      dat->c.hour,
					      dat->c.min,
					      dat->c.sec,
#else
					      EX_HOUR(dat->c.pc),
					      EX_MIN(dat->c.pc),
					      EX_SEC(dat->c.pc),
#endif
					      (dat->c.flags | HAVE_JD) &
					      ~HAVE_CIVIL);
	}
	break;
      case T_FLOAT:
	{
	    double jd, o, tmp;
	    int s, df;
	    VALUE nth, sf;
	    o = RFLOAT_VALUE(other);
	    if (o > 0)
		s = +1;
	    else {
		s = -1;
		o = -o;
	    }
	    o = modf(o, &tmp);
	    if (!floor(tmp / CM_PERIOD)) {
		nth = INT2FIX(0);
		jd = (int)tmp;
	    }
	    else {
		double i, f;
		f = modf(tmp / CM_PERIOD, &i);
		nth = f_floor(DBL2NUM(i));
		jd = (int)(f * CM_PERIOD);
	    }
	    o *= DAY_IN_SECONDS;
	    o = modf(o, &tmp);
	    df = (int)tmp;
	    o *= SECOND_IN_NANOSECONDS;
	    sf = INT2FIX((int)round(o));
	    if (s < 0) {
		jd = -jd;
		df = -df;
		sf = f_negate(sf);
	    }
	    if (f_zero_p(sf))
		sf = m_sf(dat);
	    else {
		sf = f_add(m_sf(dat), sf);
		if (f_lt_p(sf, INT2FIX(0))) {
		    df -= 1;
		    sf = f_add(sf, INT2FIX(SECOND_IN_NANOSECONDS));
		}
		else if (f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS))) {
		    df += 1;
		    sf = f_sub(sf, INT2FIX(SECOND_IN_NANOSECONDS));
		}
	    }
	    if (!df)
		df = m_df(dat);
	    else {
		df = m_df(dat) + df;
		if (df < 0) {
		    jd -= 1;
		    df += DAY_IN_SECONDS;
		}
		else if (df >= DAY_IN_SECONDS) {
		    jd += 1;
		    df -= DAY_IN_SECONDS;
		}
	    }
	    if (!jd)
		jd = m_jd(dat);
	    else {
		jd = m_jd(dat) + jd;
		canonicalize_jd(nth, jd);
	    }
	    if (f_zero_p(nth))
		nth = m_nth(dat);
	    else
		nth = f_add(m_nth(dat), nth);
	    if (!df && f_zero_p(sf) && !m_of(dat))
		return d_simple_new_internal(rb_obj_class(self),
					     nth, (int)jd,
					     m_sg(dat),
					     0, 0, 0,
					     (dat->s.flags | HAVE_JD) &
					     ~(HAVE_CIVIL | HAVE_TIME |
					       COMPLEX_DAT));
	    else
		return d_complex_new_internal(rb_obj_class(self),
					      nth, (int)jd,
					      df, sf,
					      m_of(dat), m_sg(dat),
					      0, 0, 0,
					      0, 0, 0,
					      (dat->c.flags |
					       HAVE_JD | HAVE_DF) &
					      ~(HAVE_CIVIL | HAVE_TIME));
	}
	break;
      default:
	expect_numeric(other);
	other = f_to_r(other);
#ifdef CANONICALIZATION_FOR_MATHN
	if (!k_rational_p(other))
	    return d_lite_plus(self, other);
#endif
	/* fall through */
      case T_RATIONAL:
	{
	    VALUE nth, sf, t;
	    int jd, df, s;
	    if (wholenum_p(other))
		return d_lite_plus(self, rb_rational_num(other));
	    if (f_positive_p(other))
		s = +1;
	    else {
		s = -1;
		other = f_negate(other);
	    }
	    nth = f_idiv(other, INT2FIX(CM_PERIOD));
	    t = f_mod(other, INT2FIX(CM_PERIOD));
	    jd = FIX2INT(f_idiv(t, INT2FIX(1)));
	    t = f_mod(t, INT2FIX(1));
	    t = f_mul(t, INT2FIX(DAY_IN_SECONDS));
	    df = FIX2INT(f_idiv(t, INT2FIX(1)));
	    t = f_mod(t, INT2FIX(1));
	    sf = f_mul(t, INT2FIX(SECOND_IN_NANOSECONDS));
	    if (s < 0) {
		nth = f_negate(nth);
		jd = -jd;
		df = -df;
		sf = f_negate(sf);
	    }
	    if (f_zero_p(sf))
		sf = m_sf(dat);
	    else {
		sf = f_add(m_sf(dat), sf);
		if (f_lt_p(sf, INT2FIX(0))) {
		    df -= 1;
		    sf = f_add(sf, INT2FIX(SECOND_IN_NANOSECONDS));
		}
		else if (f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS))) {
		    df += 1;
		    sf = f_sub(sf, INT2FIX(SECOND_IN_NANOSECONDS));
		}
	    }
	    if (!df)
		df = m_df(dat);
	    else {
		df = m_df(dat) + df;
		if (df < 0) {
		    jd -= 1;
		    df += DAY_IN_SECONDS;
		}
		else if (df >= DAY_IN_SECONDS) {
		    jd += 1;
		    df -= DAY_IN_SECONDS;
		}
	    }
	    if (!jd)
		jd = m_jd(dat);
	    else {
		jd = m_jd(dat) + jd;
		canonicalize_jd(nth, jd);
	    }
	    if (f_zero_p(nth))
		nth = m_nth(dat);
	    else
		nth = f_add(m_nth(dat), nth);
	    if (!df && f_zero_p(sf) && !m_of(dat))
		return d_simple_new_internal(rb_obj_class(self),
					     nth, jd,
					     m_sg(dat),
					     0, 0, 0,
					     (dat->s.flags | HAVE_JD) &
					     ~(HAVE_CIVIL | HAVE_TIME |
					       COMPLEX_DAT));
	    else
		return d_complex_new_internal(rb_obj_class(self),
					      nth, jd,
					      df, sf,
					      m_of(dat), m_sg(dat),
					      0, 0, 0,
					      0, 0, 0,
					      (dat->c.flags |
					       HAVE_JD | HAVE_DF) &
					      ~(HAVE_CIVIL | HAVE_TIME));
	}
	break;
    }
}
  
    #-(other)  ⇒ Date, Rational   
Returns the difference between the two dates if the other is a date object.  If the other is a numeric value, returns a date object pointing other days before self.  If the other is a fractional number, assumes its precision is at most nanosecond.
Date.new(2001,2,3) - 1   #=> #<Date: 2001-02-02 ...>
DateTime.new(2001,2,3) - Rational(1,2)
                         #=> #<DateTime: 2001-02-02T12:00:00+00:00 ...>
Date.new(2001,2,3) - Date.new(2001)
                         #=> (33/1)
DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
                         #=> (1/2)# File 'ext/date/date_core.c', line 5897
static VALUE
d_lite_minus(VALUE self, VALUE other)
{
    if (k_date_p(other))
	return minus_dd(self, other);
    switch (TYPE(other)) {
      case T_FIXNUM:
	return d_lite_plus(self, LONG2NUM(-FIX2LONG(other)));
      case T_FLOAT:
	return d_lite_plus(self, DBL2NUM(-RFLOAT_VALUE(other)));
      default:
	expect_numeric(other);
	/* fall through */
      case T_BIGNUM:
      case T_RATIONAL:
	return d_lite_plus(self, f_negate(other));
    }
}
  
    #<<(n)  ⇒ Date   
Returns a date object pointing n months before self. The argument n should be a numeric value.
Date.new(2001,2,3)  <<  1   #=> #<Date: 2001-01-03 ...>
Date.new(2001,2,3)  << -2   #=> #<Date: 2001-04-03 ...>When the same day does not exist for the corresponding month, the last day of the month is used instead:
Date.new(2001,3,28) << 1   #=> #<Date: 2001-02-28 ...>
Date.new(2001,3,31) << 1   #=> #<Date: 2001-02-28 ...>This also results in the following, possibly unexpected, behavior:
Date.new(2001,3,31) << 2         #=> #<Date: 2001-01-31 ...>
Date.new(2001,3,31) << 1 << 1    #=> #<Date: 2001-01-28 ...>
Date.new(2001,3,31) << 1 << -1   #=> #<Date: 2001-03-28 ...># File 'ext/date/date_core.c', line 6049
static VALUE
d_lite_lshift(VALUE self, VALUE other)
{
    expect_numeric(other);
    return d_lite_rshift(self, f_negate(other));
}
  
    #<=>(other)  ⇒ 1, ...   
Compares the two dates and returns -1, zero, 1 or nil. The other should be a date object or a numeric value as an astronomical Julian day number.
Date.new(2001,2,3) <=> Date.new(2001,2,4)   #=> -1
Date.new(2001,2,3) <=> Date.new(2001,2,3)   #=> 0
Date.new(2001,2,3) <=> Date.new(2001,2,2)   #=> 1
Date.new(2001,2,3) <=> Object.new           #=> nil
Date.new(2001,2,3) <=> Rational(4903887,2)  #=> 0See also Comparable.
# File 'ext/date/date_core.c', line 6321
static VALUE
d_lite_cmp(VALUE self, VALUE other)
{
    if (!k_date_p(other))
	return cmp_gen(self, other);
    {
	get_d2(self, other);
	if (!(simple_dat_p(adat) && simple_dat_p(bdat) &&
	      m_gregorian_p(adat) == m_gregorian_p(bdat)))
	    return cmp_dd(self, other);
	{
	    VALUE a_nth, b_nth;
	    int a_jd, b_jd;
	    m_canonicalize_jd(self, adat);
	    m_canonicalize_jd(other, bdat);
	    a_nth = m_nth(adat);
	    b_nth = m_nth(bdat);
	    if (f_eqeq_p(a_nth, b_nth)) {
		a_jd = m_jd(adat);
		b_jd = m_jd(bdat);
		if (a_jd == b_jd) {
		    return INT2FIX(0);
		}
		else if (a_jd < b_jd) {
		    return INT2FIX(-1);
		}
		else {
		    return INT2FIX(1);
		}
	    }
	    else if (f_lt_p(a_nth, b_nth)) {
		return INT2FIX(-1);
	    }
	    else {
		return INT2FIX(1);
	    }
	}
    }
}
  
    #===(other)  ⇒ Boolean   
Returns true if they are the same day.
Date.new(2001,2,3) === Date.new(2001,2,3)
                                  #=> true
Date.new(2001,2,3) === Date.new(2001,2,4)
                                  #=> false
DateTime.new(2001,2,3) === DateTime.new(2001,2,3,12)
                                  #=> true
DateTime.new(2001,2,3) === DateTime.new(2001,2,3,0,0,0,'+24:00')
                                  #=> true
DateTime.new(2001,2,3) === DateTime.new(2001,2,4,0,0,0,'+24:00')
                                  #=> false# File 'ext/date/date_core.c', line 6394
static VALUE
d_lite_equal(VALUE self, VALUE other)
{
    if (!k_date_p(other))
	return equal_gen(self, other);
    {
	get_d2(self, other);
	if (!(m_gregorian_p(adat) == m_gregorian_p(bdat)))
	    return equal_gen(self, other);
	{
	    VALUE a_nth, b_nth;
	    int a_jd, b_jd;
	    m_canonicalize_jd(self, adat);
	    m_canonicalize_jd(other, bdat);
	    a_nth = m_nth(adat);
	    b_nth = m_nth(bdat);
	    a_jd = m_local_jd(adat);
	    b_jd = m_local_jd(bdat);
	    if (f_eqeq_p(a_nth, b_nth) &&
		a_jd == b_jd)
		return Qtrue;
	    return Qfalse;
	}
    }
}
  
    #>>(n)  ⇒ Date   
Returns a date object pointing n months after self. The argument n should be a numeric value.
Date.new(2001,2,3)  >>  1   #=> #<Date: 2001-03-03 ...>
Date.new(2001,2,3)  >> -2   #=> #<Date: 2000-12-03 ...>When the same day does not exist for the corresponding month, the last day of the month is used instead:
Date.new(2001,1,28) >> 1   #=> #<Date: 2001-02-28 ...>
Date.new(2001,1,31) >> 1   #=> #<Date: 2001-02-28 ...>This also results in the following, possibly unexpected, behavior:
Date.new(2001,1,31) >> 2         #=> #<Date: 2001-03-31 ...>
Date.new(2001,1,31) >> 1 >> 1    #=> #<Date: 2001-03-28 ...>
Date.new(2001,1,31) >> 1 >> -1   #=> #<Date: 2001-01-28 ...># File 'ext/date/date_core.c', line 5987
static VALUE
d_lite_rshift(VALUE self, VALUE other)
{
    VALUE t, y, nth, rjd2;
    int m, d, rjd;
    double sg;
    get_d1(self);
    t = f_add3(f_mul(m_real_year(dat), INT2FIX(12)),
	       INT2FIX(m_mon(dat) - 1),
	       other);
    if (FIXNUM_P(t)) {
	long it = FIX2LONG(t);
	y = LONG2NUM(DIV(it, 12));
	it = MOD(it, 12);
	m = (int)it + 1;
    }
    else {
	y = f_idiv(t, INT2FIX(12));
	t = f_mod(t, INT2FIX(12));
	m = FIX2INT(t) + 1;
    }
    d = m_mday(dat);
    sg = m_sg(dat);
    while (1) {
	int ry, rm, rd, ns;
	if (valid_civil_p(y, m, d, sg,
			  &nth, &ry,
			  &rm, &rd, &rjd, &ns))
	    break;
	if (--d < 1)
	    rb_raise(rb_eArgError, "invalid date");
    }
    encode_jd(nth, rjd, &rjd2);
    return d_lite_plus(self, f_sub(rjd2, m_real_local_jd(dat)));
}
  
    #ajd  ⇒ Rational   
# File 'ext/date/date_core.c', line 4818
static VALUE
d_lite_ajd(VALUE self)
{
    get_d1(self);
    return m_ajd(dat);
}
  
    #amjd  ⇒ Rational   
# File 'ext/date/date_core.c', line 4835
static VALUE
d_lite_amjd(VALUE self)
{
    get_d1(self);
    return m_amjd(dat);
}
  
    
      #asctime  ⇒ String 
      #ctime  ⇒ String 
    
  
String 
      #ctime  ⇒ String 
    Alias for #ctime.
    
      #asctime  ⇒ String 
      #ctime  ⇒ String 
    
    Also known as: #asctime
  
String 
      #ctime  ⇒ String 
    Returns a string in asctime(3) format (but without “n0” at the end). This method is equivalent to strftime('%c').
See also asctime(3) or ctime(3).
# File 'ext/date/date_core.c', line 6937
static VALUE
d_lite_asctime(VALUE self)
{
    return strftimev("%a %b %e %H:%M:%S %Y", self, set_tmx);
}
  
    #cwday  ⇒ Fixnum   
Returns the day of calendar week (1-7, Monday is 1).
Date.new(2001,2,3).cwday          #=> 6# File 'ext/date/date_core.c', line 5011
static VALUE
d_lite_cwday(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_cwday(dat));
}
  
    #cweek  ⇒ Fixnum   
Returns the calendar week number (1-53).
Date.new(2001,2,3).cweek          #=> 5# File 'ext/date/date_core.c', line 4996
static VALUE
d_lite_cweek(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_cweek(dat));
}
  
    #cwyear  ⇒ Integer   
# File 'ext/date/date_core.c', line 4981
static VALUE
d_lite_cwyear(VALUE self)
{
    get_d1(self);
    return m_real_cwyear(dat);
}
  
    
      #mday  ⇒ Fixnum 
      #day  ⇒ Fixnum 
    
    Also known as: #mday
  
  [ GitHub ]
Fixnum 
      #day  ⇒ Fixnum 
    # File 'ext/date/date_core.c', line 4948
static VALUE
d_lite_mday(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_mday(dat));
}
  
    #day_fraction  ⇒ Rational   
  [ GitHub ]
# File 'ext/date/date_core.c', line 4963
static VALUE
d_lite_day_fraction(VALUE self)
{
    get_d1(self);
    if (simple_dat_p(dat))
	return INT2FIX(0);
    return m_fr(dat);
}
  
    
      #downto(min)  ⇒ Enumerator 
      #downto(min) {|date| ... } ⇒ self 
    
  
Enumerator 
      #downto(min) {|date| ... } ⇒ self 
    This method is equivalent to step(min, -1){|date| …}.
# File 'ext/date/date_core.c', line 6221
static VALUE
d_lite_downto(VALUE self, VALUE min)
{
    VALUE date;
    RETURN_ENUMERATOR(self, 1, &min);
    date = self;
    while (FIX2INT(d_lite_cmp(date, min)) >= 0) {
	rb_yield(date);
	date = d_lite_plus(date, INT2FIX(-1));
    }
    return self;
}
  
    #england  ⇒ Date   
This method is equivalent to new_start(Date::ENGLAND).
# File 'ext/date/date_core.c', line 5421
static VALUE
d_lite_england(VALUE self)
{
    return dup_obj_with_new_start(self, ENGLAND);
}
  
    #eql?(other)  ⇒ Boolean 
  
  # File 'ext/date/date_core.c', line 6425
static VALUE
d_lite_eql_p(VALUE self, VALUE other)
{
    if (!k_date_p(other))
	return Qfalse;
    return f_zero_p(d_lite_cmp(self, other));
}
  #hash
# File 'ext/date/date_core.c', line 6434
static VALUE
d_lite_hash(VALUE self)
{
    st_index_t v, h[4];
    get_d1(self);
    h[0] = m_nth(dat);
    h[1] = m_jd(dat);
    h[2] = m_df(dat);
    h[3] = m_sf(dat);
    v = rb_memhash(h, sizeof(h));
    return ST2FIX(v);
}
  
    #hour  ⇒ Fixnum  (private)  
  [ GitHub ]
# File 'ext/date/date_core.c', line 5168
static VALUE
d_lite_hour(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_hour(dat));
}
  
    #httpdate  ⇒ String   
This method is equivalent to strftime('%a, %d %b %Y %T GMT'). See also RFC 2616.
# File 'ext/date/date_core.c', line 6988
static VALUE
d_lite_httpdate(VALUE self)
{
    volatile VALUE dup = dup_obj_with_new_offset(self, 0);
    return strftimev("%a, %d %b %Y %T GMT", dup, set_tmx);
}
  #initialize_copy(date)
# File 'ext/date/date_core.c', line 4762
static VALUE
d_lite_initialize_copy(VALUE copy, VALUE date)
{
    rb_check_frozen(copy);
    rb_check_trusted(copy);
    if (copy == date)
	return copy;
    {
	get_d2(copy, date);
	if (simple_dat_p(bdat)) {
	    adat->s = bdat->s;
	    adat->s.flags &= ~COMPLEX_DAT;
	}
	else {
	    if (!complex_dat_p(adat))
		rb_raise(rb_eArgError,
			 "cannot load complex into simple");
	    adat->c = bdat->c;
	    adat->c.flags |= COMPLEX_DAT;
	}
    }
    return copy;
}
  
    #inspect  ⇒ String   
# File 'ext/date/date_core.c', line 6548
static VALUE
d_lite_inspect(VALUE self)
{
    get_d1(self);
    return mk_inspect(dat, rb_obj_class(self), self);
}
  
    
      #iso8601  ⇒ String 
      #xmlschema  ⇒ String 
    
    Also known as: #xmlschema
  
String 
      #xmlschema  ⇒ String 
    This method is equivalent to strftime('%F').
# File 'ext/date/date_core.c', line 6950
static VALUE
d_lite_iso8601(VALUE self)
{
    return strftimev("%Y-%m-%d", self, set_tmx);
}
  
    #italy  ⇒ Date   
This method is equivalent to new_start(Date::ITALY).
# File 'ext/date/date_core.c', line 5409
static VALUE
d_lite_italy(VALUE self)
{
    return dup_obj_with_new_start(self, ITALY);
}
  
    #jd  ⇒ Integer   
# File 'ext/date/date_core.c', line 4852
static VALUE
d_lite_jd(VALUE self)
{
    get_d1(self);
    return m_real_local_jd(dat);
}
  
    #jisx0301  ⇒ String   
  [ GitHub ]
# File 'ext/date/date_core.c', line 7039
static VALUE
d_lite_jisx0301(VALUE self)
{
    char fmtbuf[JISX0301_DATE_SIZE];
    const char *fmt;
    get_d1(self);
    fmt = jisx0301_date_format(fmtbuf, sizeof(fmtbuf),
			       m_real_local_jd(dat),
			       m_real_year(dat));
    return strftimev(fmt, self, set_tmx);
}
  
    #ld  ⇒ Integer   
Returns the Lilian day number. This is a whole number, which is adjusted by the offset as the local time.
Date.new(2001,2,3).ld            #=> 152784# File 'ext/date/date_core.c', line 4885
static VALUE
d_lite_ld(VALUE self)
{
    get_d1(self);
    return f_sub(m_real_local_jd(dat), INT2FIX(2299160));
}
  #marshal_dump
# File 'ext/date/date_core.c', line 7075
static VALUE
d_lite_marshal_dump(VALUE self)
{
    VALUE a;
    get_d1(self);
    a = rb_ary_new3(6,
		    m_nth(dat),
		    INT2FIX(m_jd(dat)),
		    INT2FIX(m_df(dat)),
		    m_sf(dat),
		    INT2FIX(m_of(dat)),
		    DBL2NUM(m_sg(dat)));
    if (FL_TEST(self, FL_EXIVAR)) {
	rb_copy_generic_ivar(a, self);
	FL_SET(a, FL_EXIVAR);
    }
    return a;
}
  #marshal_load(a)
# File 'ext/date/date_core.c', line 7099
static VALUE
d_lite_marshal_load(VALUE self, VALUE a)
{
    get_d1(self);
    rb_check_frozen(self);
    rb_check_trusted(self);
    if (!RB_TYPE_P(a, T_ARRAY))
	rb_raise(rb_eTypeError, "expected an array");
    switch (RARRAY_LEN(a)) {
      case 2: /* 1.6.x */
      case 3: /* 1.8.x, 1.9.2 */
	{
	    VALUE ajd, of, sg, nth, sf;
	    int jd, df, rof;
	    double rsg;
	    if  (RARRAY_LEN(a) == 2) {
		ajd = f_sub(RARRAY_AREF(a, 0), half_days_in_day);
		of = INT2FIX(0);
		sg = RARRAY_AREF(a, 1);
		if (!k_numeric_p(sg))
		    sg = DBL2NUM(RTEST(sg) ? GREGORIAN : JULIAN);
	    }
	    else {
		ajd = RARRAY_AREF(a, 0);
		of = RARRAY_AREF(a, 1);
		sg = RARRAY_AREF(a, 2);
	    }
	    old_to_new(ajd, of, sg,
		       &nth, &jd, &df, &sf, &rof, &rsg);
	    if (!df && f_zero_p(sf) && !rof) {
		set_to_simple(self, &dat->s, nth, jd, rsg, 0, 0, 0, HAVE_JD);
	    } else {
		if (!complex_dat_p(dat))
		    rb_raise(rb_eArgError,
			     "cannot load complex into simple");
		set_to_complex(self, &dat->c, nth, jd, df, sf, rof, rsg,
			       0, 0, 0, 0, 0, 0,
			       HAVE_JD | HAVE_DF | COMPLEX_DAT);
	    }
	}
	break;
      case 6:
	{
	    VALUE nth, sf;
	    int jd, df, of;
	    double sg;
	    nth = RARRAY_AREF(a, 0);
	    jd = NUM2INT(RARRAY_AREF(a, 1));
	    df = NUM2INT(RARRAY_AREF(a, 2));
	    sf = RARRAY_AREF(a, 3);
	    of = NUM2INT(RARRAY_AREF(a, 4));
	    sg = NUM2DBL(RARRAY_AREF(a, 5));
	    if (!df && f_zero_p(sf) && !of) {
		set_to_simple(self, &dat->s, nth, jd, sg, 0, 0, 0, HAVE_JD);
	    } else {
		if (!complex_dat_p(dat))
		    rb_raise(rb_eArgError,
			     "cannot load complex into simple");
		set_to_complex(self, &dat->c, nth, jd, df, sf, of, sg,
			       0, 0, 0, 0, 0, 0,
			       HAVE_JD | HAVE_DF | COMPLEX_DAT);
	    }
	}
	break;
      default:
	rb_raise(rb_eTypeError, "invalid size");
	break;
    }
    if (FL_TEST(a, FL_EXIVAR)) {
	rb_copy_generic_ivar(self, a);
	FL_SET(self, FL_EXIVAR);
    }
    return self;
}
  
    
      #mday  ⇒ Fixnum 
      #day  ⇒ Fixnum 
    
  
Fixnum 
      #day  ⇒ Fixnum 
    Alias for #day.
    
      #min  ⇒ Fixnum  (private)
      #minute  ⇒ Fixnum 
    
    Also known as: #minute
  
  [ GitHub ]
Fixnum  (private)
      #minute  ⇒ Fixnum 
    # File 'ext/date/date_core.c', line 5184
static VALUE
d_lite_min(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_min(dat));
}
  
    
      #min  ⇒ Fixnum  (private)
      #minute  ⇒ Fixnum 
    
  
Fixnum  (private)
      #minute  ⇒ Fixnum 
    Alias for #min.
    #mjd  ⇒ Integer   
# File 'ext/date/date_core.c', line 4869
static VALUE
d_lite_mjd(VALUE self)
{
    get_d1(self);
    return f_sub(m_real_local_jd(dat), INT2FIX(2400001));
}
  
    
      #mon  ⇒ Fixnum 
      #month  ⇒ Fixnum 
    
    Also known as: #month
  
Fixnum 
      #month  ⇒ Fixnum 
    Returns the month (1-12).
Date.new(2001,2,3).mon            #=> 2# File 'ext/date/date_core.c', line 4932
static VALUE
d_lite_mon(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_mon(dat));
}
  
    
      #mon  ⇒ Fixnum 
      #month  ⇒ Fixnum 
    
  
Fixnum 
      #month  ⇒ Fixnum 
    Alias for #mon.
    #new_offset([offset = 0])  ⇒ Date  (private)  
# File 'ext/date/date_core.c', line 5482
static VALUE
d_lite_new_offset(int argc, VALUE *argv, VALUE self)
{
    VALUE vof;
    int rof;
    rb_scan_args(argc, argv, "01", &vof);
    rof = 0;
    if (argc >= 1)
	val2off(vof, rof);
    return dup_obj_with_new_offset(self, rof);
}
  
    #new_start([start = Date::ITALY])  ⇒ Date   
# File 'ext/date/date_core.c', line 5388
static VALUE
d_lite_new_start(int argc, VALUE *argv, VALUE self)
{
    VALUE vsg;
    double sg;
    rb_scan_args(argc, argv, "01", &vsg);
    sg = DEFAULT_SG;
    if (argc >= 1)
	val2sg(vsg, sg);
    return dup_obj_with_new_start(self, sg);
}
  
    
      #succ  ⇒ Date 
      #next  ⇒ Date 
    
    Also known as: #succ
  
Date 
      #next  ⇒ Date 
    Returns a date object denoting the following day.
# File 'ext/date/date_core.c', line 5958
static VALUE
d_lite_next(VALUE self)
{
    return d_lite_next_day(0, (VALUE *)NULL, self);
}
  
    #next_day([n = 1])  ⇒ Date   
This method is equivalent to d + n.
# File 'ext/date/date_core.c', line 5923
static VALUE
d_lite_next_day(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_plus(self, n);
}
  
    #next_month([n = 1])  ⇒ Date   
This method is equivalent to d >> n.
See #>> for examples.
# File 'ext/date/date_core.c', line 6064
static VALUE
d_lite_next_month(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_rshift(self, n);
}
  
    #next_year([n = 1])  ⇒ Date   
# File 'ext/date/date_core.c', line 6106
static VALUE
d_lite_next_year(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_rshift(self, f_mul(n, INT2FIX(12)));
}
  
    #offset  ⇒ Rational  (private)  
  [ GitHub ]
# File 'ext/date/date_core.c', line 5231
static VALUE
d_lite_offset(VALUE self)
{
    get_d1(self);
    return m_of_in_day(dat);
}
  
    #prev_day([n = 1])  ⇒ Date   
This method is equivalent to d - n.
# File 'ext/date/date_core.c', line 5940
static VALUE
d_lite_prev_day(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_minus(self, n);
}
  
    #prev_month([n = 1])  ⇒ Date   
This method is equivalent to d << n.
See #<< for examples.
# File 'ext/date/date_core.c', line 6083
static VALUE
d_lite_prev_month(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_lshift(self, n);
}
  
    #prev_year([n = 1])  ⇒ Date   
# File 'ext/date/date_core.c', line 6129
static VALUE
d_lite_prev_year(int argc, VALUE *argv, VALUE self)
{
    VALUE n;
    rb_scan_args(argc, argv, "01", &n);
    if (argc < 1)
	n = INT2FIX(1);
    return d_lite_lshift(self, f_mul(n, INT2FIX(12)));
}
  
    
      #rfc2822  ⇒ String 
      #rfc822  ⇒ String 
    
  
String 
      #rfc822  ⇒ String 
    Alias for #rfc822.
    #rfc3339  ⇒ String   
This method is equivalent to strftime('%FT%T%:z').
# File 'ext/date/date_core.c', line 6962
static VALUE
d_lite_rfc3339(VALUE self)
{
    return strftimev("%Y-%m-%dT%H:%M:%S%:z", self, set_tmx);
}
  
    
      #rfc2822  ⇒ String 
      #rfc822  ⇒ String 
    
    Also known as: #rfc2822
  
String 
      #rfc822  ⇒ String 
    This method is equivalent to strftime('%a, %-d %b %Y %T %z').
# File 'ext/date/date_core.c', line 6975
static VALUE
d_lite_rfc2822(VALUE self)
{
    return strftimev("%a, %-d %b %Y %T %z", self, set_tmx);
}
  
    
      #sec  ⇒ Fixnum  (private)
      #second  ⇒ Fixnum 
    
    Also known as: #second
  
  [ GitHub ]
Fixnum  (private)
      #second  ⇒ Fixnum 
    # File 'ext/date/date_core.c', line 5200
static VALUE
d_lite_sec(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_sec(dat));
}
  
    
      #sec_fraction  ⇒ Rational  (private)
      #second_fraction  ⇒ Rational 
    
    Also known as: #second_fraction
  
  [ GitHub ]
Rational  (private)
      #second_fraction  ⇒ Rational 
    # File 'ext/date/date_core.c', line 5216
static VALUE
d_lite_sec_fraction(VALUE self)
{
    get_d1(self);
    return m_sf_in_sec(dat);
}
  
    
      #sec  ⇒ Fixnum  (private)
      #second  ⇒ Fixnum 
    
  
Fixnum  (private)
      #second  ⇒ Fixnum 
    Alias for #sec.
    
      #sec_fraction  ⇒ Rational  (private)
      #second_fraction  ⇒ Rational 
    
  
Rational  (private)
      #second_fraction  ⇒ Rational 
    Alias for #sec_fraction.
    #start  ⇒ Float   
# File 'ext/date/date_core.c', line 5318
static VALUE
d_lite_start(VALUE self)
{
    get_d1(self);
    return DBL2NUM(m_sg(dat));
}
  
    
      #step(limit[, step=1])  ⇒ Enumerator 
      #step(limit[, step=1]) {|date| ... } ⇒ self 
    
  
Enumerator 
      #step(limit[, step=1]) {|date| ... } ⇒ self 
    # File 'ext/date/date_core.c', line 6153
static VALUE
d_lite_step(int argc, VALUE *argv, VALUE self)
{
    VALUE limit, step, date;
    int c;
    rb_scan_args(argc, argv, "11", &limit, &step);
    if (argc < 2)
	step = INT2FIX(1);
#if 0
    if (f_zero_p(step))
	rb_raise(rb_eArgError, "step can't be 0");
#endif
    RETURN_ENUMERATOR(self, argc, argv);
    date = self;
    c = f_cmp(step, INT2FIX(0));
    if (c < 0) {
	while (FIX2INT(d_lite_cmp(date, limit)) >= 0) {
	    rb_yield(date);
	    date = d_lite_plus(date, step);
	}
    }
    else if (c == 0) {
	while (1)
	    rb_yield(date);
    }
    else /* if (c > 0) */ {
	while (FIX2INT(d_lite_cmp(date, limit)) <= 0) {
	    rb_yield(date);
	    date = d_lite_plus(date, step);
	}
    }
    return self;
}
  
    #strftime([format = '%F'])  ⇒ String   
Formats date 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.
A directive consists of a percent (%) character, zero or more flags, an optional minimum field width, an 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.The minimum field width specifies the minimum width.
The modifiers are “E”, “O”, “:”, “::” and “:::”. “E” and “O” are ignored. No effect to result currently.
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 (round down.  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..59)
  %L - Millisecond of the second (000..999)
  %N - Fractional seconds digits, default is 9 digits (nanosecond)
          %3N  millisecond (3 digits)   %15N femtosecond (15 digits)
          %6N  microsecond (6 digits)   %18N attosecond  (18 digits)
          %9N  nanosecond  (9 digits)   %21N zeptosecond (21 digits)
          %12N picosecond (12 digits)   %24N yoctosecond (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 - hour, minute and second offset from UTC
                                            (e.g. +09, +09:30, +09:30:30)
  %Z - Equivalent to %:z (e.g. +09:00)
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 week 1 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 week 1 of YYYY 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 Unix Epoch:
  %s - Number of seconds since 1970-01-01 00:00:00 UTC.
  %Q - Number of milliseconds 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-%Y)
  %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)
  %+ - date(1) (%a %b %e %H:%M:%S %Z %Y)This method is similar to the strftime() function defined in ISO C and POSIX. Several directives (%a, %A, %b, %B, %c, %p, %r, %x, %X, %E*, %O* and %Z) are locale dependent in the function. However, this method is locale independent. So, the result may differ even if the same format string is used in other systems such as C. It is good practice to avoid %x and %X because there are corresponding locale independent representations, %D and %T.
Examples:
d = DateTime.new(2007,11,19,8,37,48,"-06:00")
                          #=> #<DateTime: 2007-11-19T08:37:48-0600 ...>
d.strftime("Printed on %m/%d/%Y")   #=> "Printed on 11/19/2007"
d.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)See also strftime(3) and .strptime.
# File 'ext/date/date_core.c', line 6903
static VALUE
d_lite_strftime(int argc, VALUE *argv, VALUE self)
{
    return date_strftime_internal(argc, argv, self,
				  "%Y-%m-%d", set_tmx);
}
  
    
      #succ  ⇒ Date 
      #next  ⇒ Date 
    
  
Date 
      #next  ⇒ Date 
    Alias for #next.
    #to_date  ⇒ self   
Returns self.
# File 'ext/date/date_core.c', line 8546
static VALUE
date_to_date(VALUE self)
{
    return self;
}
  
    #to_datetime  ⇒ Date   
Returns a ::Time object which denotes self.
# File 'ext/date/date_core.c', line 8558
static VALUE
date_to_datetime(VALUE self)
{
    get_d1a(self);
    if (simple_dat_p(adat)) {
	VALUE new = d_lite_s_alloc_simple(cDateTime);
	{
	    get_d1b(new);
	    bdat->s = adat->s;
	    return new;
	}
    }
    else {
	VALUE new = d_lite_s_alloc_complex(cDateTime);
	{
	    get_d1b(new);
	    bdat->c = adat->c;
	    bdat->c.df = 0;
	    RB_OBJ_WRITE(new, &bdat->c.sf, INT2FIX(0));
#ifndef USE_PACK
	    bdat->c.hour = 0;
	    bdat->c.min = 0;
	    bdat->c.sec = 0;
#else
	    bdat->c.pc = PACK5(EX_MON(adat->c.pc), EX_MDAY(adat->c.pc),
			       0, 0, 0);
	    bdat->c.flags |= HAVE_DF | HAVE_TIME;
#endif
	    return new;
	}
    }
}
  
    #to_s  ⇒ String   
Returns a string in an ISO 8601 format. (This method doesn't use the expanded representations.)
Date.new(2001,2,3).to_s  #=> "2001-02-03"# File 'ext/date/date_core.c', line 6462
static VALUE
d_lite_to_s(VALUE self)
{
    return strftimev("%Y-%m-%d", self, set_tmx);
}
  #to_time ⇒ Time
Returns a ::Time object which denotes self.
# File 'ext/date/date_core.c', line 8529
static VALUE
date_to_time(VALUE self)
{
    get_d1(self);
    return f_local3(rb_cTime,
		    m_real_year(dat),
		    INT2FIX(m_mon(dat)),
		    INT2FIX(m_mday(dat)));
}
  
    
      #upto(max)  ⇒ Enumerator 
      #upto(max) {|date| ... } ⇒ self 
    
  
Enumerator 
      #upto(max) {|date| ... } ⇒ self 
    This method is equivalent to step(max, 1){|date| …}.
# File 'ext/date/date_core.c', line 6199
static VALUE
d_lite_upto(VALUE self, VALUE max)
{
    VALUE date;
    RETURN_ENUMERATOR(self, 1, &max);
    date = self;
    while (FIX2INT(d_lite_cmp(date, max)) <= 0) {
	rb_yield(date);
	date = d_lite_plus(date, INT2FIX(1));
    }
    return self;
}
  
    #wday  ⇒ Fixnum   
Returns the day of week (0-6, Sunday is zero).
Date.new(2001,2,3).wday           #=> 6# File 'ext/date/date_core.c', line 5042
static VALUE
d_lite_wday(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_wday(dat));
}
  
    
      #iso8601  ⇒ String 
      #xmlschema  ⇒ String 
    
  
String 
      #xmlschema  ⇒ String 
    Alias for #iso8601.
    #yday  ⇒ Fixnum   
Returns the day of the year (1-366).
Date.new(2001,2,3).yday           #=> 34# File 'ext/date/date_core.c', line 4916
static VALUE
d_lite_yday(VALUE self)
{
    get_d1(self);
    return INT2FIX(m_yday(dat));
}
  
    #year  ⇒ Integer   
  [ GitHub ]
# File 'ext/date/date_core.c', line 4901
static VALUE
d_lite_year(VALUE self)
{
    get_d1(self);
    return m_real_year(dat);
}
  
    #zone  ⇒ String  (private)  
  [ GitHub ]
# File 'ext/date/date_core.c', line 5246
static VALUE
d_lite_zone(VALUE self)
{
    get_d1(self);
    return m_zone(dat);
}