date 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ext/date/date_core.c CHANGED
@@ -465,6 +465,7 @@ c_find_ldoy(int y, double sg, int *rjd, int *ns)
465
465
  }
466
466
 
467
467
  #ifndef NDEBUG
468
+ /* :nodoc: */
468
469
  static int
469
470
  c_find_fdom(int y, int m, double sg, int *rjd, int *ns)
470
471
  {
@@ -621,6 +622,7 @@ c_jd_to_weeknum(int jd, int f, double sg, int *ry, int *rw, int *rd)
621
622
  }
622
623
 
623
624
  #ifndef NDEBUG
625
+ /* :nodoc: */
624
626
  static void
625
627
  c_nth_kday_to_jd(int y, int m, int n, int k, double sg, int *rjd, int *ns)
626
628
  {
@@ -646,6 +648,7 @@ c_jd_to_wday(int jd)
646
648
  }
647
649
 
648
650
  #ifndef NDEBUG
651
+ /* :nodoc: */
649
652
  static void
650
653
  c_jd_to_nth_kday(int jd, double sg, int *ry, int *rm, int *rn, int *rk)
651
654
  {
@@ -758,6 +761,8 @@ c_valid_civil_p(int y, int m, int d, double sg,
758
761
 
759
762
  if (m < 0)
760
763
  m += 13;
764
+ if (m < 1 || m > 12)
765
+ return 0;
761
766
  if (d < 0) {
762
767
  if (!c_find_ldom(y, m, sg, rjd, ns))
763
768
  return 0;
@@ -822,6 +827,7 @@ c_valid_weeknum_p(int y, int w, int d, int f, double sg,
822
827
  }
823
828
 
824
829
  #ifndef NDEBUG
830
+ /* :nodoc: */
825
831
  static int
826
832
  c_valid_nth_kday_p(int y, int m, int n, int k, double sg,
827
833
  int *rm, int *rn, int *rk, int *rjd, int *ns)
@@ -963,6 +969,7 @@ ns_to_day(VALUE n)
963
969
  }
964
970
 
965
971
  #ifndef NDEBUG
972
+ /* :nodoc: */
966
973
  static VALUE
967
974
  ms_to_sec(VALUE m)
968
975
  {
@@ -981,6 +988,7 @@ ns_to_sec(VALUE n)
981
988
  }
982
989
 
983
990
  #ifndef NDEBUG
991
+ /* :nodoc: */
984
992
  inline static VALUE
985
993
  ins_to_day(int n)
986
994
  {
@@ -1016,6 +1024,7 @@ day_to_sec(VALUE d)
1016
1024
  }
1017
1025
 
1018
1026
  #ifndef NDEBUG
1027
+ /* :nodoc: */
1019
1028
  static VALUE
1020
1029
  day_to_ns(VALUE d)
1021
1030
  {
@@ -1040,6 +1049,7 @@ sec_to_ns(VALUE s)
1040
1049
  }
1041
1050
 
1042
1051
  #ifndef NDEBUG
1052
+ /* :nodoc: */
1043
1053
  static VALUE
1044
1054
  isec_to_ns(int s)
1045
1055
  {
@@ -1066,6 +1076,7 @@ div_df(VALUE d, VALUE *f)
1066
1076
  }
1067
1077
 
1068
1078
  #ifndef NDEBUG
1079
+ /* :nodoc: */
1069
1080
  static VALUE
1070
1081
  div_sf(VALUE s, VALUE *f)
1071
1082
  {
@@ -1500,6 +1511,7 @@ m_df(union DateData *x)
1500
1511
  }
1501
1512
 
1502
1513
  #ifndef NDEBUG
1514
+ /* :nodoc: */
1503
1515
  static VALUE
1504
1516
  m_df_in_day(union DateData *x)
1505
1517
  {
@@ -1997,6 +2009,7 @@ expect_numeric(VALUE x)
1997
2009
  }
1998
2010
 
1999
2011
  #ifndef NDEBUG
2012
+ /* :nodoc: */
2000
2013
  static void
2001
2014
  civil_to_jd(VALUE y, int m, int d, double sg,
2002
2015
  VALUE *nth, int *ry,
@@ -2309,6 +2322,7 @@ valid_weeknum_p(VALUE y, int w, int d, int f, double sg,
2309
2322
  }
2310
2323
 
2311
2324
  #ifndef NDEBUG
2325
+ /* :nodoc: */
2312
2326
  static int
2313
2327
  valid_nth_kday_p(VALUE y, int m, int n, int k, double sg,
2314
2328
  VALUE *nth, int *ry,
@@ -2446,6 +2460,7 @@ valid_jd_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2446
2460
  }
2447
2461
 
2448
2462
  #ifndef NDEBUG
2463
+ /* :nodoc: */
2449
2464
  static VALUE
2450
2465
  date_s__valid_jd_p(int argc, VALUE *argv, VALUE klass)
2451
2466
  {
@@ -2466,13 +2481,16 @@ date_s__valid_jd_p(int argc, VALUE *argv, VALUE klass)
2466
2481
 
2467
2482
  /*
2468
2483
  * call-seq:
2469
- * Date.valid_jd?(jd[, start=Date::ITALY]) -> bool
2484
+ * Date.valid_jd?(jd, start = Date::ITALY) -> true
2470
2485
  *
2471
- * Just returns true. It's nonsense, but is for symmetry.
2486
+ * Implemented for compatibility;
2487
+ * returns +true+ unless +jd+ is invalid (i.e., not a Numeric).
2472
2488
  *
2473
- * Date.valid_jd?(2451944) #=> true
2489
+ * Date.valid_jd?(2451944) # => true
2474
2490
  *
2475
- * See also ::jd.
2491
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
2492
+ *
2493
+ * Related: Date.jd.
2476
2494
  */
2477
2495
  static VALUE
2478
2496
  date_s_valid_jd_p(int argc, VALUE *argv, VALUE klass)
@@ -2532,6 +2550,7 @@ valid_civil_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2532
2550
  }
2533
2551
 
2534
2552
  #ifndef NDEBUG
2553
+ /* :nodoc: */
2535
2554
  static VALUE
2536
2555
  date_s__valid_civil_p(int argc, VALUE *argv, VALUE klass)
2537
2556
  {
@@ -2554,18 +2573,20 @@ date_s__valid_civil_p(int argc, VALUE *argv, VALUE klass)
2554
2573
 
2555
2574
  /*
2556
2575
  * call-seq:
2557
- * Date.valid_civil?(year, month, mday[, start=Date::ITALY]) -> bool
2558
- * Date.valid_date?(year, month, mday[, start=Date::ITALY]) -> bool
2576
+ * Date.valid_civil?(year, month, mday, start = Date::ITALY) -> true or false
2577
+ *
2578
+ * Returns +true+ if the arguments define a valid ordinal date,
2579
+ * +false+ otherwise:
2580
+ *
2581
+ * Date.valid_date?(2001, 2, 3) # => true
2582
+ * Date.valid_date?(2001, 2, 29) # => false
2583
+ * Date.valid_date?(2001, 2, -1) # => true
2559
2584
  *
2560
- * Returns true if the given calendar date is valid, and false if not.
2561
- * Valid in this context is whether the arguments passed to this
2562
- * method would be accepted by ::new.
2585
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
2563
2586
  *
2564
- * Date.valid_date?(2001,2,3) #=> true
2565
- * Date.valid_date?(2001,2,29) #=> false
2566
- * Date.valid_date?(2001,2,-1) #=> true
2587
+ * Date.valid_date? is an alias for Date.valid_civil?.
2567
2588
  *
2568
- * See also ::jd and ::civil.
2589
+ * Related: Date.jd, Date.new.
2569
2590
  */
2570
2591
  static VALUE
2571
2592
  date_s_valid_civil_p(int argc, VALUE *argv, VALUE klass)
@@ -2621,6 +2642,7 @@ valid_ordinal_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2621
2642
  }
2622
2643
 
2623
2644
  #ifndef NDEBUG
2645
+ /* :nodoc: */
2624
2646
  static VALUE
2625
2647
  date_s__valid_ordinal_p(int argc, VALUE *argv, VALUE klass)
2626
2648
  {
@@ -2642,14 +2664,17 @@ date_s__valid_ordinal_p(int argc, VALUE *argv, VALUE klass)
2642
2664
 
2643
2665
  /*
2644
2666
  * call-seq:
2645
- * Date.valid_ordinal?(year, yday[, start=Date::ITALY]) -> bool
2667
+ * Date.valid_ordinal?(year, yday, start = Date::ITALY) -> true or false
2668
+ *
2669
+ * Returns +true+ if the arguments define a valid ordinal date,
2670
+ * +false+ otherwise:
2646
2671
  *
2647
- * Returns true if the given ordinal date is valid, and false if not.
2672
+ * Date.valid_ordinal?(2001, 34) # => true
2673
+ * Date.valid_ordinal?(2001, 366) # => false
2648
2674
  *
2649
- * Date.valid_ordinal?(2001,34) #=> true
2650
- * Date.valid_ordinal?(2001,366) #=> false
2675
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
2651
2676
  *
2652
- * See also ::jd and ::ordinal.
2677
+ * Related: Date.jd, Date.ordinal.
2653
2678
  */
2654
2679
  static VALUE
2655
2680
  date_s_valid_ordinal_p(int argc, VALUE *argv, VALUE klass)
@@ -2704,6 +2729,7 @@ valid_commercial_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2704
2729
  }
2705
2730
 
2706
2731
  #ifndef NDEBUG
2732
+ /* :nodoc: */
2707
2733
  static VALUE
2708
2734
  date_s__valid_commercial_p(int argc, VALUE *argv, VALUE klass)
2709
2735
  {
@@ -2726,14 +2752,19 @@ date_s__valid_commercial_p(int argc, VALUE *argv, VALUE klass)
2726
2752
 
2727
2753
  /*
2728
2754
  * call-seq:
2729
- * Date.valid_commercial?(cwyear, cweek, cwday[, start=Date::ITALY]) -> bool
2755
+ * Date.valid_commercial?(cwyear, cweek, cwday, start = Date::ITALY) -> true or false
2756
+ *
2757
+ * Returns +true+ if the arguments define a valid commercial date,
2758
+ * +false+ otherwise:
2759
+ *
2760
+ * Date.valid_commercial?(2001, 5, 6) # => true
2761
+ * Date.valid_commercial?(2001, 5, 8) # => false
2730
2762
  *
2731
- * Returns true if the given week date is valid, and false if not.
2763
+ * See Date.commercial.
2732
2764
  *
2733
- * Date.valid_commercial?(2001,5,6) #=> true
2734
- * Date.valid_commercial?(2001,5,8) #=> false
2765
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
2735
2766
  *
2736
- * See also ::jd and ::commercial.
2767
+ * Related: Date.jd, Date.commercial.
2737
2768
  */
2738
2769
  static VALUE
2739
2770
  date_s_valid_commercial_p(int argc, VALUE *argv, VALUE klass)
@@ -2760,6 +2791,7 @@ date_s_valid_commercial_p(int argc, VALUE *argv, VALUE klass)
2760
2791
  }
2761
2792
 
2762
2793
  #ifndef NDEBUG
2794
+ /* :nodoc: */
2763
2795
  static VALUE
2764
2796
  valid_weeknum_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2765
2797
  {
@@ -2791,6 +2823,7 @@ valid_weeknum_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2791
2823
  }
2792
2824
  }
2793
2825
 
2826
+ /* :nodoc: */
2794
2827
  static VALUE
2795
2828
  date_s__valid_weeknum_p(int argc, VALUE *argv, VALUE klass)
2796
2829
  {
@@ -2811,6 +2844,7 @@ date_s__valid_weeknum_p(int argc, VALUE *argv, VALUE klass)
2811
2844
  return valid_weeknum_sub(5, argv2, klass, 1);
2812
2845
  }
2813
2846
 
2847
+ /* :nodoc: */
2814
2848
  static VALUE
2815
2849
  date_s_valid_weeknum_p(int argc, VALUE *argv, VALUE klass)
2816
2850
  {
@@ -2862,6 +2896,7 @@ valid_nth_kday_sub(int argc, VALUE *argv, VALUE klass, int need_jd)
2862
2896
  }
2863
2897
  }
2864
2898
 
2899
+ /* :nodoc: */
2865
2900
  static VALUE
2866
2901
  date_s__valid_nth_kday_p(int argc, VALUE *argv, VALUE klass)
2867
2902
  {
@@ -2882,6 +2917,7 @@ date_s__valid_nth_kday_p(int argc, VALUE *argv, VALUE klass)
2882
2917
  return valid_nth_kday_sub(5, argv2, klass, 1);
2883
2918
  }
2884
2919
 
2920
+ /* :nodoc: */
2885
2921
  static VALUE
2886
2922
  date_s_valid_nth_kday_p(int argc, VALUE *argv, VALUE klass)
2887
2923
  {
@@ -2904,6 +2940,7 @@ date_s_valid_nth_kday_p(int argc, VALUE *argv, VALUE klass)
2904
2940
  return Qtrue;
2905
2941
  }
2906
2942
 
2943
+ /* :nodoc: */
2907
2944
  static VALUE
2908
2945
  date_s_zone_to_diff(VALUE klass, VALUE str)
2909
2946
  {
@@ -2913,13 +2950,15 @@ date_s_zone_to_diff(VALUE klass, VALUE str)
2913
2950
 
2914
2951
  /*
2915
2952
  * call-seq:
2916
- * Date.julian_leap?(year) -> bool
2953
+ * Date.julian_leap?(year) -> true or false
2954
+ *
2955
+ * Returns +true+ if the given year is a leap year
2956
+ * in the {proleptic Julian calendar}[https://en.wikipedia.org/wiki/Proleptic_Julian_calendar], +false+ otherwise:
2917
2957
  *
2918
- * Returns true if the given year is a leap year of the proleptic
2919
- * Julian calendar.
2958
+ * Date.julian_leap?(1900) # => true
2959
+ * Date.julian_leap?(1901) # => false
2920
2960
  *
2921
- * Date.julian_leap?(1900) #=> true
2922
- * Date.julian_leap?(1901) #=> false
2961
+ * Related: Date.gregorian_leap?.
2923
2962
  */
2924
2963
  static VALUE
2925
2964
  date_s_julian_leap_p(VALUE klass, VALUE y)
@@ -2934,14 +2973,17 @@ date_s_julian_leap_p(VALUE klass, VALUE y)
2934
2973
 
2935
2974
  /*
2936
2975
  * call-seq:
2937
- * Date.gregorian_leap?(year) -> bool
2938
- * Date.leap?(year) -> bool
2976
+ * Date.gregorian_leap?(year) -> true or false
2977
+ *
2978
+ * Returns +true+ if the given year is a leap year
2979
+ * in the {proleptic Gregorian calendar}[https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar], +false+ otherwise:
2980
+ *
2981
+ * Date.gregorian_leap?(2000) # => true
2982
+ * Date.gregorian_leap?(2001) # => false
2939
2983
  *
2940
- * Returns true if the given year is a leap year of the proleptic
2941
- * Gregorian calendar.
2984
+ * Date.leap? is an alias for Date.gregorian_leap?.
2942
2985
  *
2943
- * Date.gregorian_leap?(1900) #=> false
2944
- * Date.gregorian_leap?(2000) #=> true
2986
+ * Related: Date.julian_leap?.
2945
2987
  */
2946
2988
  static VALUE
2947
2989
  date_s_gregorian_leap_p(VALUE klass, VALUE y)
@@ -3094,6 +3136,7 @@ old_to_new(VALUE ajd, VALUE of, VALUE sg,
3094
3136
  }
3095
3137
 
3096
3138
  #ifndef NDEBUG
3139
+ /* :nodoc: */
3097
3140
  static VALUE
3098
3141
  date_s_new_bang(int argc, VALUE *argv, VALUE klass)
3099
3142
  {
@@ -3281,16 +3324,29 @@ static VALUE d_lite_plus(VALUE, VALUE);
3281
3324
 
3282
3325
  /*
3283
3326
  * call-seq:
3284
- * Date.jd([jd=0[, start=Date::ITALY]]) -> date
3327
+ * Date.jd(jd = 0, start = Date::ITALY) -> date
3328
+ *
3329
+ * Returns a new \Date object formed from the arguments:
3330
+ *
3331
+ * Date.jd(2451944).to_s # => "2001-02-03"
3332
+ * Date.jd(2451945).to_s # => "2001-02-04"
3333
+ * Date.jd(0).to_s # => "-4712-01-01"
3334
+ *
3335
+ * The returned date is:
3285
3336
  *
3286
- * Creates a date object denoting the given chronological Julian day
3287
- * number.
3337
+ * - Gregorian, if the argument is greater than or equal to +start+:
3288
3338
  *
3289
- * Date.jd(2451944) #=> #<Date: 2001-02-03 ...>
3290
- * Date.jd(2451945) #=> #<Date: 2001-02-04 ...>
3291
- * Date.jd(0) #=> #<Date: -4712-01-01 ...>
3339
+ * Date::ITALY # => 2299161
3340
+ * Date.jd(Date::ITALY).gregorian? # => true
3341
+ * Date.jd(Date::ITALY + 1).gregorian? # => true
3292
3342
  *
3293
- * See also ::new.
3343
+ * - Julian, otherwise
3344
+ *
3345
+ * Date.jd(Date::ITALY - 1).julian? # => true
3346
+ *
3347
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
3348
+ *
3349
+ * Related: Date.new.
3294
3350
  */
3295
3351
  static VALUE
3296
3352
  date_s_jd(int argc, VALUE *argv, VALUE klass)
@@ -3329,19 +3385,33 @@ date_s_jd(int argc, VALUE *argv, VALUE klass)
3329
3385
 
3330
3386
  /*
3331
3387
  * call-seq:
3332
- * Date.ordinal([year=-4712[, yday=1[, start=Date::ITALY]]]) -> date
3388
+ * Date.ordinal(year = -4712, yday = 1, start = Date::ITALY) -> date
3389
+ *
3390
+ * Returns a new \Date object formed fom the arguments.
3391
+ *
3392
+ * With no arguments, returns the date for January 1, -4712:
3393
+ *
3394
+ * Date.ordinal.to_s # => "-4712-01-01"
3395
+ *
3396
+ * With argument +year+, returns the date for January 1 of that year:
3397
+ *
3398
+ * Date.ordinal(2001).to_s # => "2001-01-01"
3399
+ * Date.ordinal(-2001).to_s # => "-2001-01-01"
3400
+ *
3401
+ * With positive argument +yday+ == +n+,
3402
+ * returns the date for the +nth+ day of the given year:
3403
+ *
3404
+ * Date.ordinal(2001, 14).to_s # => "2001-01-14"
3333
3405
  *
3334
- * Creates a date object denoting the given ordinal date.
3406
+ * With negative argument +yday+, counts backward from the end of the year:
3335
3407
  *
3336
- * The day of year should be a negative or a positive number (as a
3337
- * relative day from the end of year when negative). It should not be
3338
- * zero.
3408
+ * Date.ordinal(2001, -14).to_s # => "2001-12-18"
3339
3409
  *
3340
- * Date.ordinal(2001) #=> #<Date: 2001-01-01 ...>
3341
- * Date.ordinal(2001,34) #=> #<Date: 2001-02-03 ...>
3342
- * Date.ordinal(2001,-1) #=> #<Date: 2001-12-31 ...>
3410
+ * Raises an exception if +yday+ is zero or out of range.
3343
3411
  *
3344
- * See also ::jd and ::new.
3412
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
3413
+ *
3414
+ * Related: Date.jd, Date.new.
3345
3415
  */
3346
3416
  static VALUE
3347
3417
  date_s_ordinal(int argc, VALUE *argv, VALUE klass)
@@ -3389,29 +3459,7 @@ date_s_ordinal(int argc, VALUE *argv, VALUE klass)
3389
3459
  }
3390
3460
 
3391
3461
  /*
3392
- * call-seq:
3393
- * Date.civil([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]]) -> date
3394
- * Date.new([year=-4712[, month=1[, mday=1[, start=Date::ITALY]]]]) -> date
3395
- *
3396
- * Creates a date object denoting the given calendar date.
3397
- *
3398
- * In this class, BCE years are counted astronomically. Thus, the
3399
- * year before the year 1 is the year zero, and the year preceding the
3400
- * year zero is the year -1. The month and the day of month should be
3401
- * a negative or a positive number (as a relative month/day from the
3402
- * end of year/month when negative). They should not be zero.
3403
- *
3404
- * The last argument should be a Julian day number which denotes the
3405
- * day of calendar reform. Date::ITALY (2299161=1582-10-15),
3406
- * Date::ENGLAND (2361222=1752-09-14), Date::GREGORIAN (the proleptic
3407
- * Gregorian calendar) and Date::JULIAN (the proleptic Julian
3408
- * calendar) can be specified as a day of calendar reform.
3409
- *
3410
- * Date.new(2001) #=> #<Date: 2001-01-01 ...>
3411
- * Date.new(2001,2,3) #=> #<Date: 2001-02-03 ...>
3412
- * Date.new(2001,2,-1) #=> #<Date: 2001-02-28 ...>
3413
- *
3414
- * See also ::jd.
3462
+ * Same as Date.new.
3415
3463
  */
3416
3464
  static VALUE
3417
3465
  date_s_civil(int argc, VALUE *argv, VALUE klass)
@@ -3419,6 +3467,31 @@ date_s_civil(int argc, VALUE *argv, VALUE klass)
3419
3467
  return date_initialize(argc, argv, d_lite_s_alloc_simple(klass));
3420
3468
  }
3421
3469
 
3470
+ /*
3471
+ * call-seq:
3472
+ * Date.new(year = -4712, month = 1, mday = 1, start = Date::ITALY) -> date
3473
+ *
3474
+ * Returns a new \Date object constructed from the given arguments:
3475
+ *
3476
+ * Date.new(2022).to_s # => "2022-01-01"
3477
+ * Date.new(2022, 2).to_s # => "2022-02-01"
3478
+ * Date.new(2022, 2, 4).to_s # => "2022-02-04"
3479
+ *
3480
+ * Argument +month+ should be in range (1..12) or range (-12..-1);
3481
+ * when the argument is negative, counts backward from the end of the year:
3482
+ *
3483
+ * Date.new(2022, -11, 4).to_s # => "2022-02-04"
3484
+ *
3485
+ * Argument +mday+ should be in range (1..n) or range (-n..-1)
3486
+ * where +n+ is the number of days in the month;
3487
+ * when the argument is negative, counts backward from the end of the month.
3488
+ *
3489
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
3490
+ *
3491
+ * Date.civil is an alias for Date.new.
3492
+ *
3493
+ * Related: Date.jd.
3494
+ */
3422
3495
  static VALUE
3423
3496
  date_initialize(int argc, VALUE *argv, VALUE self)
3424
3497
  {
@@ -3483,19 +3556,47 @@ date_initialize(int argc, VALUE *argv, VALUE self)
3483
3556
 
3484
3557
  /*
3485
3558
  * call-seq:
3486
- * Date.commercial([cwyear=-4712[, cweek=1[, cwday=1[, start=Date::ITALY]]]]) -> date
3559
+ * Date.commercial(cwyear = -4712, cweek = 1, cwday = 1, start = Date::ITALY) -> date
3560
+ *
3561
+ * Returns a new \Date object constructed from the arguments.
3562
+ *
3563
+ * Argument +cwyear+ gives the year, and should be an integer.
3564
+ *
3565
+ * Argument +cweek+ gives the index of the week within the year,
3566
+ * and should be in range (1..53) or (-53..-1);
3567
+ * in some years, 53 or -53 will be out-of-range;
3568
+ * if negative, counts backward from the end of the year:
3569
+ *
3570
+ * Date.commercial(2022, 1, 1).to_s # => "2022-01-03"
3571
+ * Date.commercial(2022, 52, 1).to_s # => "2022-12-26"
3572
+ *
3573
+ * Argument +cwday+ gives the indes of the weekday within the week,
3574
+ * and should be in range (1..7) or (-7..-1);
3575
+ * 1 or -7 is Monday;
3576
+ * if negative, counts backward from the end of the week:
3577
+ *
3578
+ * Date.commercial(2022, 1, 1).to_s # => "2022-01-03"
3579
+ * Date.commercial(2022, 1, -7).to_s # => "2022-01-03"
3580
+ *
3581
+ * When +cweek+ is 1:
3582
+ *
3583
+ * - If January 1 is a Friday, Saturday, or Sunday,
3584
+ * the first week begins in the week after:
3585
+ *
3586
+ * Date::ABBR_DAYNAMES[Date.new(2023, 1, 1).wday] # => "Sun"
3587
+ * Date.commercial(2023, 1, 1).to_s # => "2023-01-02"
3588
+ Date.commercial(2023, 1, 7).to_s # => "2023-01-08"
3487
3589
  *
3488
- * Creates a date object denoting the given week date.
3590
+ * - Otherwise, the first week is the week of January 1,
3591
+ * which may mean some of the days fall on the year before:
3489
3592
  *
3490
- * The week and the day of week should be a negative or a positive
3491
- * number (as a relative week/day from the end of year/week when
3492
- * negative). They should not be zero.
3593
+ * Date::ABBR_DAYNAMES[Date.new(2020, 1, 1).wday] # => "Wed"
3594
+ * Date.commercial(2020, 1, 1).to_s # => "2019-12-30"
3595
+ Date.commercial(2020, 1, 7).to_s # => "2020-01-05"
3493
3596
  *
3494
- * Date.commercial(2001) #=> #<Date: 2001-01-01 ...>
3495
- * Date.commercial(2002) #=> #<Date: 2001-12-31 ...>
3496
- * Date.commercial(2001,5,6) #=> #<Date: 2001-02-03 ...>
3597
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
3497
3598
  *
3498
- * See also ::jd and ::new.
3599
+ * Related: Date.jd, Date.new, Date.ordinal.
3499
3600
  */
3500
3601
  static VALUE
3501
3602
  date_s_commercial(int argc, VALUE *argv, VALUE klass)
@@ -3547,6 +3648,7 @@ date_s_commercial(int argc, VALUE *argv, VALUE klass)
3547
3648
  }
3548
3649
 
3549
3650
  #ifndef NDEBUG
3651
+ /* :nodoc: */
3550
3652
  static VALUE
3551
3653
  date_s_weeknum(int argc, VALUE *argv, VALUE klass)
3552
3654
  {
@@ -3596,6 +3698,7 @@ date_s_weeknum(int argc, VALUE *argv, VALUE klass)
3596
3698
  return ret;
3597
3699
  }
3598
3700
 
3701
+ /* :nodoc: */
3599
3702
  static VALUE
3600
3703
  date_s_nth_kday(int argc, VALUE *argv, VALUE klass)
3601
3704
  {
@@ -3670,11 +3773,14 @@ static void set_sg(union DateData *, double);
3670
3773
 
3671
3774
  /*
3672
3775
  * call-seq:
3673
- * Date.today([start=Date::ITALY]) -> date
3776
+ * Date.today(start = Date::ITALY) -> date
3777
+ *
3778
+ * Returns a new \Date object constructed from the present date:
3674
3779
  *
3675
- * Creates a date object denoting the present day.
3780
+ * Date.today.to_s # => "2022-07-06"
3781
+ *
3782
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
3676
3783
  *
3677
- * Date.today #=> #<Date: 2011-06-11 ...>
3678
3784
  */
3679
3785
  static VALUE
3680
3786
  date_s_today(int argc, VALUE *argv, VALUE klass)
@@ -4265,16 +4371,20 @@ date_s__strptime_internal(int argc, VALUE *argv, VALUE klass,
4265
4371
 
4266
4372
  /*
4267
4373
  * call-seq:
4268
- * Date._strptime(string[, format='%F']) -> hash
4374
+ * Date._strptime(string, format = '%F') -> hash
4269
4375
  *
4270
- * Parses the given representation of date and time with the given
4271
- * template, and returns a hash of parsed elements. _strptime does
4272
- * not support specification of flags and width unlike strftime.
4376
+ * Returns a hash of values parsed from +string+
4377
+ * according to the given +format+:
4273
4378
  *
4274
- * Date._strptime('2001-02-03', '%Y-%m-%d')
4275
- * #=> {:year=>2001, :mon=>2, :mday=>3}
4379
+ * Date._strptime('2001-02-03', '%Y-%m-%d') # => {:year=>2001, :mon=>2, :mday=>3}
4276
4380
  *
4277
- * See also strptime(3) and #strftime.
4381
+ * For other formats, see
4382
+ * {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html].
4383
+ * (Unlike Date.strftime, does not support flags and width.)
4384
+ *
4385
+ * See also {strptime(3)}[https://man7.org/linux/man-pages/man3/strptime.3.html].
4386
+ *
4387
+ * Related: Date.strptime (returns a \Date object).
4278
4388
  */
4279
4389
  static VALUE
4280
4390
  date_s__strptime(int argc, VALUE *argv, VALUE klass)
@@ -4284,21 +4394,28 @@ date_s__strptime(int argc, VALUE *argv, VALUE klass)
4284
4394
 
4285
4395
  /*
4286
4396
  * call-seq:
4287
- * Date.strptime([string='-4712-01-01'[, format='%F'[, start=Date::ITALY]]]) -> date
4397
+ * Date.strptime(string = '-4712-01-01', format = '%F', start = Date::ITALY) -> date
4288
4398
  *
4289
- * Parses the given representation of date and time with the given
4290
- * template, and creates a date object. strptime does not support
4291
- * specification of flags and width unlike strftime.
4399
+ * Returns a new \Date object with values parsed from +string+,
4400
+ * according to the given +format+:
4292
4401
  *
4293
- * Date.strptime('2001-02-03', '%Y-%m-%d') #=> #<Date: 2001-02-03 ...>
4294
- * Date.strptime('03-02-2001', '%d-%m-%Y') #=> #<Date: 2001-02-03 ...>
4295
- * Date.strptime('2001-034', '%Y-%j') #=> #<Date: 2001-02-03 ...>
4296
- * Date.strptime('2001-W05-6', '%G-W%V-%u') #=> #<Date: 2001-02-03 ...>
4297
- * Date.strptime('2001 04 6', '%Y %U %w') #=> #<Date: 2001-02-03 ...>
4298
- * Date.strptime('2001 05 6', '%Y %W %u') #=> #<Date: 2001-02-03 ...>
4299
- * Date.strptime('sat3feb01', '%a%d%b%y') #=> #<Date: 2001-02-03 ...>
4402
+ * Date.strptime('2001-02-03', '%Y-%m-%d') # => #<Date: 2001-02-03>
4403
+ * Date.strptime('03-02-2001', '%d-%m-%Y') # => #<Date: 2001-02-03>
4404
+ * Date.strptime('2001-034', '%Y-%j') # => #<Date: 2001-02-03>
4405
+ * Date.strptime('2001-W05-6', '%G-W%V-%u') # => #<Date: 2001-02-03>
4406
+ * Date.strptime('2001 04 6', '%Y %U %w') # => #<Date: 2001-02-03>
4407
+ * Date.strptime('2001 05 6', '%Y %W %u') # => #<Date: 2001-02-03>
4408
+ * Date.strptime('sat3feb01', '%a%d%b%y') # => #<Date: 2001-02-03>
4300
4409
  *
4301
- * See also strptime(3) and #strftime.
4410
+ * For other formats, see
4411
+ * {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html].
4412
+ * (Unlike Date.strftime, does not support flags and width.)
4413
+ *
4414
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4415
+ *
4416
+ * See also {strptime(3)}[https://man7.org/linux/man-pages/man3/strptime.3.html].
4417
+ *
4418
+ * Related: Date._strptime (returns a hash).
4302
4419
  */
4303
4420
  static VALUE
4304
4421
  date_s_strptime(int argc, VALUE *argv, VALUE klass)
@@ -4339,12 +4456,24 @@ get_limit(VALUE opt)
4339
4456
  return 128;
4340
4457
  }
4341
4458
 
4459
+ #ifndef HAVE_RB_CATEGORY_WARN
4460
+ #define rb_category_warn(category, fmt) rb_warn(fmt)
4461
+ #endif
4462
+
4342
4463
  static void
4343
4464
  check_limit(VALUE str, VALUE opt)
4344
4465
  {
4466
+ size_t slen, limit;
4467
+ if (NIL_P(str)) return;
4468
+ if (SYMBOL_P(str)) {
4469
+ rb_category_warn(RB_WARN_CATEGORY_DEPRECATED,
4470
+ "The ability to parse Symbol is an unintentional bug and is deprecated");
4471
+ str = rb_sym2str(str);
4472
+ }
4473
+
4345
4474
  StringValue(str);
4346
- size_t slen = RSTRING_LEN(str);
4347
- size_t limit = get_limit(opt);
4475
+ slen = RSTRING_LEN(str);
4476
+ limit = get_limit(opt);
4348
4477
  if (slen > limit) {
4349
4478
  rb_raise(rb_eArgError,
4350
4479
  "string length (%"PRI_SIZE_PREFIX"u) exceeds the limit %"PRI_SIZE_PREFIX"u", slen, limit);
@@ -4373,25 +4502,32 @@ date_s__parse_internal(int argc, VALUE *argv, VALUE klass)
4373
4502
 
4374
4503
  /*
4375
4504
  * call-seq:
4376
- * Date._parse(string[, comp=true], limit: 128) -> hash
4505
+ * Date._parse(string, comp = true, limit: 128) -> hash
4377
4506
  *
4378
- * Parses the given representation of date and time, and returns a
4379
- * hash of parsed elements.
4507
+ * <b>Note</b>:
4508
+ * This method recognizes many forms in +string+,
4509
+ * but it is not a validator.
4510
+ * For formats, see
4511
+ * {"Specialized Format Strings" in Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-Specialized+Format+Strings]
4380
4512
  *
4381
- * This method *does not* function as a validator. If the input
4382
- * string does not match valid formats strictly, you may get a cryptic
4383
- * result. Should consider to use `Date._strptime` or
4384
- * `DateTime._strptime` instead of this method as possible.
4513
+ * If +string+ does not specify a valid date,
4514
+ * the result is unpredictable;
4515
+ * consider using Date._strptime instead.
4385
4516
  *
4386
- * If the optional second argument is true and the detected year is in
4387
- * the range "00" to "99", considers the year a 2-digit form and makes
4388
- * it full.
4517
+ * Returns a hash of values parsed from +string+:
4389
4518
  *
4390
- * Date._parse('2001-02-03') #=> {:year=>2001, :mon=>2, :mday=>3}
4519
+ * Date._parse('2001-02-03') # => {:year=>2001, :mon=>2, :mday=>3}
4391
4520
  *
4392
- * Raise an ArgumentError when the string length is longer than _limit_.
4393
- * You can stop this check by passing `limit: nil`, but note that
4394
- * it may take a long time to parse.
4521
+ * If +comp+ is +true+ and the given year is in the range <tt>(0..99)</tt>,
4522
+ * the current century is supplied;
4523
+ * otherwise, the year is taken as given:
4524
+ *
4525
+ * Date._parse('01-02-03', true) # => {:year=>2001, :mon=>2, :mday=>3}
4526
+ * Date._parse('01-02-03', false) # => {:year=>1, :mon=>2, :mday=>3}
4527
+ *
4528
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4529
+ *
4530
+ * Related: Date.parse(returns a \Date object).
4395
4531
  */
4396
4532
  static VALUE
4397
4533
  date_s__parse(int argc, VALUE *argv, VALUE klass)
@@ -4401,27 +4537,36 @@ date_s__parse(int argc, VALUE *argv, VALUE klass)
4401
4537
 
4402
4538
  /*
4403
4539
  * call-seq:
4404
- * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]], limit: 128) -> date
4540
+ * Date.parse(string = '-4712-01-01', comp = true, start = Date::ITALY, limit: 128) -> date
4405
4541
  *
4406
- * Parses the given representation of date and time, and creates a
4407
- * date object.
4542
+ * <b>Note</b>:
4543
+ * This method recognizes many forms in +string+,
4544
+ * but it is not a validator.
4545
+ * For formats, see
4546
+ * {"Specialized Format Strings" in Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-Specialized+Format+Strings]
4547
+ * If +string+ does not specify a valid date,
4548
+ * the result is unpredictable;
4549
+ * consider using Date._strptime instead.
4408
4550
  *
4409
- * This method *does not* function as a validator. If the input
4410
- * string does not match valid formats strictly, you may get a cryptic
4411
- * result. Should consider to use `Date.strptime` instead of this
4412
- * method as possible.
4551
+ * Returns a new \Date object with values parsed from +string+:
4413
4552
  *
4414
- * If the optional second argument is true and the detected year is in
4415
- * the range "00" to "99", considers the year a 2-digit form and makes
4416
- * it full.
4553
+ * Date.parse('2001-02-03') # => #<Date: 2001-02-03>
4554
+ * Date.parse('20010203') # => #<Date: 2001-02-03>
4555
+ * Date.parse('3rd Feb 2001') # => #<Date: 2001-02-03>
4417
4556
  *
4418
- * Date.parse('2001-02-03') #=> #<Date: 2001-02-03 ...>
4419
- * Date.parse('20010203') #=> #<Date: 2001-02-03 ...>
4420
- * Date.parse('3rd Feb 2001') #=> #<Date: 2001-02-03 ...>
4557
+ * If +comp+ is +true+ and the given year is in the range <tt>(0..99)</tt>,
4558
+ * the current century is supplied;
4559
+ * otherwise, the year is taken as given:
4421
4560
  *
4422
- * Raise an ArgumentError when the string length is longer than _limit_.
4423
- * You can stop this check by passing `limit: nil`, but note that
4424
- * it may take a long time to parse.
4561
+ * Date.parse('01-02-03', true) # => #<Date: 2001-02-03>
4562
+ * Date.parse('01-02-03', false) # => #<Date: 0001-02-03>
4563
+ *
4564
+ * See:
4565
+ *
4566
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4567
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4568
+ *
4569
+ * Related: Date._parse (returns a hash).
4425
4570
  */
4426
4571
  static VALUE
4427
4572
  date_s_parse(int argc, VALUE *argv, VALUE klass)
@@ -4442,11 +4587,11 @@ date_s_parse(int argc, VALUE *argv, VALUE klass)
4442
4587
 
4443
4588
  {
4444
4589
  int argc2 = 2;
4445
- VALUE argv2[3];
4590
+ VALUE argv2[3], hash;
4446
4591
  argv2[0] = str;
4447
4592
  argv2[1] = comp;
4448
4593
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4449
- VALUE hash = date_s__parse(argc2, argv2, klass);
4594
+ hash = date_s__parse(argc2, argv2, klass);
4450
4595
  return d_new_by_frags(klass, hash, sg);
4451
4596
  }
4452
4597
  }
@@ -4460,13 +4605,18 @@ VALUE date__jisx0301(VALUE);
4460
4605
 
4461
4606
  /*
4462
4607
  * call-seq:
4463
- * Date._iso8601(string, limit: 128) -> hash
4608
+ * Date._iso8601(string, limit: 128) -> hash
4464
4609
  *
4465
- * Returns a hash of parsed elements.
4610
+ * Returns a hash of values parsed from +string+, which should contain
4611
+ * an {ISO 8601 formatted date}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-ISO+8601+Format+Specifications]:
4466
4612
  *
4467
- * Raise an ArgumentError when the string length is longer than _limit_.
4468
- * You can stop this check by passing `limit: nil`, but note that
4469
- * it may take a long time to parse.
4613
+ * d = Date.new(2001, 2, 3)
4614
+ * s = d.iso8601 # => "2001-02-03"
4615
+ * Date._iso8601(s) # => {:mday=>3, :year=>2001, :mon=>2}
4616
+ *
4617
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4618
+ *
4619
+ * Related: Date.iso8601 (returns a \Date object).
4470
4620
  */
4471
4621
  static VALUE
4472
4622
  date_s__iso8601(int argc, VALUE *argv, VALUE klass)
@@ -4481,18 +4631,22 @@ date_s__iso8601(int argc, VALUE *argv, VALUE klass)
4481
4631
 
4482
4632
  /*
4483
4633
  * call-seq:
4484
- * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4634
+ * Date.iso8601(string = '-4712-01-01', start = Date::ITALY, limit: 128) -> date
4485
4635
  *
4486
- * Creates a new Date object by parsing from a string according to
4487
- * some typical ISO 8601 formats.
4636
+ * Returns a new \Date object with values parsed from +string+,
4637
+ * which should contain
4638
+ * an {ISO 8601 formatted date}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-ISO+8601+Format+Specifications]:
4488
4639
  *
4489
- * Date.iso8601('2001-02-03') #=> #<Date: 2001-02-03 ...>
4490
- * Date.iso8601('20010203') #=> #<Date: 2001-02-03 ...>
4491
- * Date.iso8601('2001-W05-6') #=> #<Date: 2001-02-03 ...>
4640
+ * d = Date.new(2001, 2, 3)
4641
+ * s = d.iso8601 # => "2001-02-03"
4642
+ * Date.iso8601(s) # => #<Date: 2001-02-03>
4492
4643
  *
4493
- * Raise an ArgumentError when the string length is longer than _limit_.
4494
- * You can stop this check by passing `limit: nil`, but note that
4495
- * it may take a long time to parse.
4644
+ * See:
4645
+ *
4646
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4647
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4648
+ *
4649
+ * Related: Date._iso8601 (returns a hash).
4496
4650
  */
4497
4651
  static VALUE
4498
4652
  date_s_iso8601(int argc, VALUE *argv, VALUE klass)
@@ -4511,23 +4665,29 @@ date_s_iso8601(int argc, VALUE *argv, VALUE klass)
4511
4665
 
4512
4666
  {
4513
4667
  int argc2 = 1;
4514
- VALUE argv2[2];
4668
+ VALUE argv2[2], hash;
4515
4669
  argv2[0] = str;
4516
4670
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4517
- VALUE hash = date_s__iso8601(argc2, argv2, klass);
4671
+ hash = date_s__iso8601(argc2, argv2, klass);
4518
4672
  return d_new_by_frags(klass, hash, sg);
4519
4673
  }
4520
4674
  }
4521
4675
 
4522
4676
  /*
4523
4677
  * call-seq:
4524
- * Date._rfc3339(string, limit: 128) -> hash
4678
+ * Date._rfc3339(string, limit: 128) -> hash
4525
4679
  *
4526
- * Returns a hash of parsed elements.
4680
+ * Returns a hash of values parsed from +string+, which should be a valid
4681
+ * {RFC 3339 format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-RFC+3339+Format]:
4527
4682
  *
4528
- * Raise an ArgumentError when the string length is longer than _limit_.
4529
- * You can stop this check by passing `limit: nil`, but note that
4530
- * it may take a long time to parse.
4683
+ * d = Date.new(2001, 2, 3)
4684
+ * s = d.rfc3339 # => "2001-02-03T00:00:00+00:00"
4685
+ * Date._rfc3339(s)
4686
+ * # => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0}
4687
+ *
4688
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4689
+ *
4690
+ * Related: Date.rfc3339 (returns a \Date object).
4531
4691
  */
4532
4692
  static VALUE
4533
4693
  date_s__rfc3339(int argc, VALUE *argv, VALUE klass)
@@ -4542,16 +4702,22 @@ date_s__rfc3339(int argc, VALUE *argv, VALUE klass)
4542
4702
 
4543
4703
  /*
4544
4704
  * call-seq:
4545
- * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> date
4705
+ * Date.rfc3339(string = '-4712-01-01T00:00:00+00:00', start = Date::ITALY, limit: 128) -> date
4546
4706
  *
4547
- * Creates a new Date object by parsing from a string according to
4548
- * some typical RFC 3339 formats.
4707
+ * Returns a new \Date object with values parsed from +string+,
4708
+ * which should be a valid
4709
+ * {RFC 3339 format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-RFC+3339+Format]:
4549
4710
  *
4550
- * Date.rfc3339('2001-02-03T04:05:06+07:00') #=> #<Date: 2001-02-03 ...>
4711
+ * d = Date.new(2001, 2, 3)
4712
+ * s = d.rfc3339 # => "2001-02-03T00:00:00+00:00"
4713
+ * Date.rfc3339(s) # => #<Date: 2001-02-03>
4551
4714
  *
4552
- * Raise an ArgumentError when the string length is longer than _limit_.
4553
- * You can stop this check by passing `limit: nil`, but note that
4554
- * it may take a long time to parse.
4715
+ * See:
4716
+ *
4717
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4718
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4719
+ *
4720
+ * Related: Date._rfc3339 (returns a hash).
4555
4721
  */
4556
4722
  static VALUE
4557
4723
  date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
@@ -4570,23 +4736,28 @@ date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
4570
4736
 
4571
4737
  {
4572
4738
  int argc2 = 1;
4573
- VALUE argv2[2];
4739
+ VALUE argv2[2], hash;
4574
4740
  argv2[0] = str;
4575
4741
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4576
- VALUE hash = date_s__rfc3339(argc2, argv2, klass);
4742
+ hash = date_s__rfc3339(argc2, argv2, klass);
4577
4743
  return d_new_by_frags(klass, hash, sg);
4578
4744
  }
4579
4745
  }
4580
4746
 
4581
4747
  /*
4582
4748
  * call-seq:
4583
- * Date._xmlschema(string, limit: 128) -> hash
4749
+ * Date._xmlschema(string, limit: 128) -> hash
4584
4750
  *
4585
- * Returns a hash of parsed elements.
4751
+ * Returns a hash of values parsed from +string+, which should be a valid
4752
+ * XML date format:
4586
4753
  *
4587
- * Raise an ArgumentError when the string length is longer than _limit_.
4588
- * You can stop this check by passing `limit: nil`, but note that
4589
- * it may take a long time to parse.
4754
+ * d = Date.new(2001, 2, 3)
4755
+ * s = d.xmlschema # => "2001-02-03"
4756
+ * Date._xmlschema(s) # => {:year=>2001, :mon=>2, :mday=>3}
4757
+ *
4758
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4759
+ *
4760
+ * Related: Date.xmlschema (returns a \Date object).
4590
4761
  */
4591
4762
  static VALUE
4592
4763
  date_s__xmlschema(int argc, VALUE *argv, VALUE klass)
@@ -4601,16 +4772,21 @@ date_s__xmlschema(int argc, VALUE *argv, VALUE klass)
4601
4772
 
4602
4773
  /*
4603
4774
  * call-seq:
4604
- * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4775
+ * Date.xmlschema(string = '-4712-01-01', start = Date::ITALY, limit: 128) -> date
4605
4776
  *
4606
- * Creates a new Date object by parsing from a string according to
4607
- * some typical XML Schema formats.
4777
+ * Returns a new \Date object with values parsed from +string+,
4778
+ * which should be a valid XML date format:
4608
4779
  *
4609
- * Date.xmlschema('2001-02-03') #=> #<Date: 2001-02-03 ...>
4780
+ * d = Date.new(2001, 2, 3)
4781
+ * s = d.xmlschema # => "2001-02-03"
4782
+ * Date.xmlschema(s) # => #<Date: 2001-02-03>
4610
4783
  *
4611
- * Raise an ArgumentError when the string length is longer than _limit_.
4612
- * You can stop this check by passing `limit: nil`, but note that
4613
- * it may take a long time to parse.
4784
+ * See:
4785
+ *
4786
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4787
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4788
+ *
4789
+ * Related: Date._xmlschema (returns a hash).
4614
4790
  */
4615
4791
  static VALUE
4616
4792
  date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
@@ -4629,24 +4805,31 @@ date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
4629
4805
 
4630
4806
  {
4631
4807
  int argc2 = 1;
4632
- VALUE argv2[2];
4808
+ VALUE argv2[2], hash;
4633
4809
  argv2[0] = str;
4634
4810
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4635
- VALUE hash = date_s__xmlschema(argc2, argv2, klass);
4811
+ hash = date_s__xmlschema(argc2, argv2, klass);
4636
4812
  return d_new_by_frags(klass, hash, sg);
4637
4813
  }
4638
4814
  }
4639
4815
 
4640
4816
  /*
4641
4817
  * call-seq:
4642
- * Date._rfc2822(string, limit: 128) -> hash
4643
- * Date._rfc822(string, limit: 128) -> hash
4818
+ * Date._rfc2822(string, limit: 128) -> hash
4644
4819
  *
4645
- * Returns a hash of parsed elements.
4820
+ * Returns a hash of values parsed from +string+, which should be a valid
4821
+ * {RFC 2822 date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-RFC+2822+Format]:
4646
4822
  *
4647
- * Raise an ArgumentError when the string length is longer than _limit_.
4648
- * You can stop this check by passing `limit: nil`, but note that
4649
- * it may take a long time to parse.
4823
+ * d = Date.new(2001, 2, 3)
4824
+ * s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000"
4825
+ * Date._rfc2822(s)
4826
+ * # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}
4827
+ *
4828
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4829
+ *
4830
+ * Date._rfc822 is an alias for Date._rfc2822.
4831
+ *
4832
+ * Related: Date.rfc2822 (returns a \Date object).
4650
4833
  */
4651
4834
  static VALUE
4652
4835
  date_s__rfc2822(int argc, VALUE *argv, VALUE klass)
@@ -4661,18 +4844,24 @@ date_s__rfc2822(int argc, VALUE *argv, VALUE klass)
4661
4844
 
4662
4845
  /*
4663
4846
  * call-seq:
4664
- * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date
4665
- * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date
4847
+ * Date.rfc2822(string = 'Mon, 1 Jan -4712 00:00:00 +0000', start = Date::ITALY, limit: 128) -> date
4666
4848
  *
4667
- * Creates a new Date object by parsing from a string according to
4668
- * some typical RFC 2822 formats.
4849
+ * Returns a new \Date object with values parsed from +string+,
4850
+ * which should be a valid
4851
+ * {RFC 2822 date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-RFC+2822+Format]:
4669
4852
  *
4670
- * Date.rfc2822('Sat, 3 Feb 2001 00:00:00 +0000')
4671
- * #=> #<Date: 2001-02-03 ...>
4853
+ * d = Date.new(2001, 2, 3)
4854
+ * s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000"
4855
+ * Date.rfc2822(s) # => #<Date: 2001-02-03>
4672
4856
  *
4673
- * Raise an ArgumentError when the string length is longer than _limit_.
4674
- * You can stop this check by passing `limit: nil`, but note that
4675
- * it may take a long time to parse.
4857
+ * See:
4858
+ *
4859
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4860
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4861
+ *
4862
+ * Date.rfc822 is an alias for Date.rfc2822.
4863
+ *
4864
+ * Related: Date._rfc2822 (returns a hash).
4676
4865
  */
4677
4866
  static VALUE
4678
4867
  date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
@@ -4690,23 +4879,27 @@ date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
4690
4879
 
4691
4880
  {
4692
4881
  int argc2 = 1;
4693
- VALUE argv2[2];
4882
+ VALUE argv2[2], hash;
4694
4883
  argv2[0] = str;
4695
4884
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4696
- VALUE hash = date_s__rfc2822(argc2, argv2, klass);
4885
+ hash = date_s__rfc2822(argc2, argv2, klass);
4697
4886
  return d_new_by_frags(klass, hash, sg);
4698
4887
  }
4699
4888
  }
4700
4889
 
4701
4890
  /*
4702
4891
  * call-seq:
4703
- * Date._httpdate(string, limit: 128) -> hash
4892
+ * Date._httpdate(string, limit: 128) -> hash
4704
4893
  *
4705
- * Returns a hash of parsed elements.
4894
+ * Returns a hash of values parsed from +string+, which should be a valid
4895
+ * {HTTP date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-HTTP+Format]:
4706
4896
  *
4707
- * Raise an ArgumentError when the string length is longer than _limit_.
4708
- * You can stop this check by passing `limit: nil`, but note that
4709
- * it may take a long time to parse.
4897
+ * d = Date.new(2001, 2, 3)
4898
+ * s = d.httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT"
4899
+ * Date._httpdate(s)
4900
+ * # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0}
4901
+ *
4902
+ * Related: Date.httpdate (returns a \Date object).
4710
4903
  */
4711
4904
  static VALUE
4712
4905
  date_s__httpdate(int argc, VALUE *argv, VALUE klass)
@@ -4721,17 +4914,22 @@ date_s__httpdate(int argc, VALUE *argv, VALUE klass)
4721
4914
 
4722
4915
  /*
4723
4916
  * call-seq:
4724
- * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY], limit: 128) -> date
4917
+ * Date.httpdate(string = 'Mon, 01 Jan -4712 00:00:00 GMT', start = Date::ITALY, limit: 128) -> date
4725
4918
  *
4726
- * Creates a new Date object by parsing from a string according to
4727
- * some RFC 2616 format.
4919
+ * Returns a new \Date object with values parsed from +string+,
4920
+ * which should be a valid
4921
+ * {HTTP date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-HTTP+Format]:
4728
4922
  *
4729
- * Date.httpdate('Sat, 03 Feb 2001 00:00:00 GMT')
4730
- * #=> #<Date: 2001-02-03 ...>
4923
+ * d = Date.new(2001, 2, 3)
4924
+ s = d.httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT"
4925
+ Date.httpdate(s) # => #<Date: 2001-02-03>
4731
4926
  *
4732
- * Raise an ArgumentError when the string length is longer than _limit_.
4733
- * You can stop this check by passing `limit: nil`, but note that
4734
- * it may take a long time to parse.
4927
+ * See:
4928
+ *
4929
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
4930
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
4931
+ *
4932
+ * Related: Date._httpdate (returns a hash).
4735
4933
  */
4736
4934
  static VALUE
4737
4935
  date_s_httpdate(int argc, VALUE *argv, VALUE klass)
@@ -4749,23 +4947,28 @@ date_s_httpdate(int argc, VALUE *argv, VALUE klass)
4749
4947
 
4750
4948
  {
4751
4949
  int argc2 = 1;
4752
- VALUE argv2[2];
4950
+ VALUE argv2[2], hash;
4753
4951
  argv2[0] = str;
4754
4952
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4755
- VALUE hash = date_s__httpdate(argc2, argv2, klass);
4953
+ hash = date_s__httpdate(argc2, argv2, klass);
4756
4954
  return d_new_by_frags(klass, hash, sg);
4757
4955
  }
4758
4956
  }
4759
4957
 
4760
4958
  /*
4761
4959
  * call-seq:
4762
- * Date._jisx0301(string, limit: 128) -> hash
4960
+ * Date._jisx0301(string, limit: 128) -> hash
4763
4961
  *
4764
- * Returns a hash of parsed elements.
4962
+ * Returns a hash of values parsed from +string+, which should be a valid
4963
+ * {JIS X 0301 date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-JIS+X+0301+Format]:
4765
4964
  *
4766
- * Raise an ArgumentError when the string length is longer than _limit_.
4767
- * You can stop this check by passing `limit: nil`, but note that
4768
- * it may take a long time to parse.
4965
+ * d = Date.new(2001, 2, 3)
4966
+ * s = d.jisx0301 # => "H13.02.03"
4967
+ * Date._jisx0301(s) # => {:year=>2001, :mon=>2, :mday=>3}
4968
+ *
4969
+ * See argument {limit}[rdoc-ref:Date@Argument+limit].
4970
+ *
4971
+ * Related: Date.jisx0301 (returns a \Date object).
4769
4972
  */
4770
4973
  static VALUE
4771
4974
  date_s__jisx0301(int argc, VALUE *argv, VALUE klass)
@@ -4780,20 +4983,25 @@ date_s__jisx0301(int argc, VALUE *argv, VALUE klass)
4780
4983
 
4781
4984
  /*
4782
4985
  * call-seq:
4783
- * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4986
+ * Date.jisx0301(string = '-4712-01-01', start = Date::ITALY, limit: 128) -> date
4784
4987
  *
4785
- * Creates a new Date object by parsing from a string according to
4786
- * some typical JIS X 0301 formats.
4988
+ * Returns a new \Date object with values parsed from +string+,
4989
+ * which should be a valid {JIS X 0301 format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-JIS+X+0301+Format]:
4787
4990
  *
4788
- * Date.jisx0301('H13.02.03') #=> #<Date: 2001-02-03 ...>
4991
+ * d = Date.new(2001, 2, 3)
4992
+ * s = d.jisx0301 # => "H13.02.03"
4993
+ * Date.jisx0301(s) # => #<Date: 2001-02-03>
4789
4994
  *
4790
4995
  * For no-era year, legacy format, Heisei is assumed.
4791
4996
  *
4792
- * Date.jisx0301('13.02.03') #=> #<Date: 2001-02-03 ...>
4997
+ * Date.jisx0301('13.02.03') # => #<Date: 2001-02-03>
4793
4998
  *
4794
- * Raise an ArgumentError when the string length is longer than _limit_.
4795
- * You can stop this check by passing `limit: nil`, but note that
4796
- * it may take a long time to parse.
4999
+ * See:
5000
+ *
5001
+ * - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
5002
+ * - Argument {limit}[rdoc-ref:Date@Argument+limit].
5003
+ *
5004
+ * Related: Date._jisx0301 (returns a hash).
4797
5005
  */
4798
5006
  static VALUE
4799
5007
  date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
@@ -4812,10 +5020,10 @@ date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
4812
5020
 
4813
5021
  {
4814
5022
  int argc2 = 1;
4815
- VALUE argv2[2];
5023
+ VALUE argv2[2], hash;
4816
5024
  argv2[0] = str;
4817
5025
  if (!NIL_P(opt)) argv2[argc2++] = opt;
4818
- VALUE hash = date_s__jisx0301(argc2, argv2, klass);
5026
+ hash = date_s__jisx0301(argc2, argv2, klass);
4819
5027
  return d_new_by_frags(klass, hash, sg);
4820
5028
  }
4821
5029
  }
@@ -4985,6 +5193,7 @@ d_lite_initialize_copy(VALUE copy, VALUE date)
4985
5193
  }
4986
5194
 
4987
5195
  #ifndef NDEBUG
5196
+ /* :nodoc: */
4988
5197
  static VALUE
4989
5198
  d_lite_fill(VALUE self)
4990
5199
  {
@@ -5074,12 +5283,15 @@ d_lite_mjd(VALUE self)
5074
5283
 
5075
5284
  /*
5076
5285
  * call-seq:
5077
- * d.ld -> integer
5286
+ * ld -> integer
5078
5287
  *
5079
- * Returns the Lilian day number. This is a whole number, which is
5080
- * adjusted by the offset as the local time.
5288
+ * Returns the
5289
+ * {Lilian day number}[https://en.wikipedia.org/wiki/Lilian_date],
5290
+ * which is the number of days since the beginning of the Gregorian
5291
+ * calendar, October 15, 1582.
5292
+ *
5293
+ * Date.new(2001, 2, 3).ld # => 152784
5081
5294
  *
5082
- * Date.new(2001,2,3).ld #=> 152784
5083
5295
  */
5084
5296
  static VALUE
5085
5297
  d_lite_ld(VALUE self)
@@ -5090,12 +5302,13 @@ d_lite_ld(VALUE self)
5090
5302
 
5091
5303
  /*
5092
5304
  * call-seq:
5093
- * d.year -> integer
5305
+ * year -> integer
5306
+ *
5307
+ * Returns the year:
5094
5308
  *
5095
- * Returns the year.
5309
+ * Date.new(2001, 2, 3).year # => 2001
5310
+ * (Date.new(1, 1, 1) - 1).year # => 0
5096
5311
  *
5097
- * Date.new(2001,2,3).year #=> 2001
5098
- * (Date.new(1,1,1) - 1).year #=> 0
5099
5312
  */
5100
5313
  static VALUE
5101
5314
  d_lite_year(VALUE self)
@@ -5106,11 +5319,12 @@ d_lite_year(VALUE self)
5106
5319
 
5107
5320
  /*
5108
5321
  * call-seq:
5109
- * d.yday -> fixnum
5322
+ * yday -> integer
5110
5323
  *
5111
- * Returns the day of the year (1-366).
5324
+ * Returns the day of the year, in range (1..366):
5325
+ *
5326
+ * Date.new(2001, 2, 3).yday # => 34
5112
5327
  *
5113
- * Date.new(2001,2,3).yday #=> 34
5114
5328
  */
5115
5329
  static VALUE
5116
5330
  d_lite_yday(VALUE self)
@@ -5121,12 +5335,13 @@ d_lite_yday(VALUE self)
5121
5335
 
5122
5336
  /*
5123
5337
  * call-seq:
5124
- * d.mon -> fixnum
5125
- * d.month -> fixnum
5338
+ * mon -> integer
5339
+ *
5340
+ * Returns the month in range (1..12):
5126
5341
  *
5127
- * Returns the month (1-12).
5342
+ * Date.new(2001, 2, 3).mon # => 2
5128
5343
  *
5129
- * Date.new(2001,2,3).mon #=> 2
5344
+ * Date#month is an alias for Date#mon.
5130
5345
  */
5131
5346
  static VALUE
5132
5347
  d_lite_mon(VALUE self)
@@ -5137,12 +5352,13 @@ d_lite_mon(VALUE self)
5137
5352
 
5138
5353
  /*
5139
5354
  * call-seq:
5140
- * d.mday -> fixnum
5141
- * d.day -> fixnum
5355
+ * mday -> integer
5142
5356
  *
5143
- * Returns the day of the month (1-31).
5357
+ * Returns the day of the month in range (1..31):
5144
5358
  *
5145
- * Date.new(2001,2,3).mday #=> 3
5359
+ * Date.new(2001, 2, 3).mday # => 3
5360
+ *
5361
+ * Date#day is an alias for Date#mday.
5146
5362
  */
5147
5363
  static VALUE
5148
5364
  d_lite_mday(VALUE self)
@@ -5153,11 +5369,12 @@ d_lite_mday(VALUE self)
5153
5369
 
5154
5370
  /*
5155
5371
  * call-seq:
5156
- * d.day_fraction -> rational
5372
+ * day_fraction -> rational
5373
+ *
5374
+ * Returns the fractional part of the day in range (Rational(0, 1)...Rational(1, 1)):
5157
5375
  *
5158
- * Returns the fractional part of the day.
5376
+ * DateTime.new(2001,2,3,12).day_fraction # => (1/2)
5159
5377
  *
5160
- * DateTime.new(2001,2,3,12).day_fraction #=> (1/2)
5161
5378
  */
5162
5379
  static VALUE
5163
5380
  d_lite_day_fraction(VALUE self)
@@ -5170,12 +5387,14 @@ d_lite_day_fraction(VALUE self)
5170
5387
 
5171
5388
  /*
5172
5389
  * call-seq:
5173
- * d.cwyear -> integer
5390
+ * cwyear -> integer
5391
+ *
5392
+ * Returns commercial-date year for +self+
5393
+ * (see Date.commercial):
5174
5394
  *
5175
- * Returns the calendar week based year.
5395
+ * Date.new(2001, 2, 3).cwyear # => 2001
5396
+ * Date.new(2000, 1, 1).cwyear # => 1999
5176
5397
  *
5177
- * Date.new(2001,2,3).cwyear #=> 2001
5178
- * Date.new(2000,1,1).cwyear #=> 1999
5179
5398
  */
5180
5399
  static VALUE
5181
5400
  d_lite_cwyear(VALUE self)
@@ -5186,11 +5405,13 @@ d_lite_cwyear(VALUE self)
5186
5405
 
5187
5406
  /*
5188
5407
  * call-seq:
5189
- * d.cweek -> fixnum
5408
+ * cweek -> integer
5190
5409
  *
5191
- * Returns the calendar week number (1-53).
5410
+ * Returns commercial-date week index for +self+
5411
+ * (see Date.commercial):
5412
+ *
5413
+ * Date.new(2001, 2, 3).cweek # => 5
5192
5414
  *
5193
- * Date.new(2001,2,3).cweek #=> 5
5194
5415
  */
5195
5416
  static VALUE
5196
5417
  d_lite_cweek(VALUE self)
@@ -5201,11 +5422,14 @@ d_lite_cweek(VALUE self)
5201
5422
 
5202
5423
  /*
5203
5424
  * call-seq:
5204
- * d.cwday -> fixnum
5425
+ * cwday -> integer
5426
+ *
5427
+ * Returns the commercial-date weekday index for +self+
5428
+ * (see Date.commercial);
5429
+ * 1 is Monday:
5205
5430
  *
5206
- * Returns the day of calendar week (1-7, Monday is 1).
5431
+ * Date.new(2001, 2, 3).cwday # => 6
5207
5432
  *
5208
- * Date.new(2001,2,3).cwday #=> 6
5209
5433
  */
5210
5434
  static VALUE
5211
5435
  d_lite_cwday(VALUE self)
@@ -5215,6 +5439,7 @@ d_lite_cwday(VALUE self)
5215
5439
  }
5216
5440
 
5217
5441
  #ifndef NDEBUG
5442
+ /* :nodoc: */
5218
5443
  static VALUE
5219
5444
  d_lite_wnum0(VALUE self)
5220
5445
  {
@@ -5222,6 +5447,7 @@ d_lite_wnum0(VALUE self)
5222
5447
  return INT2FIX(m_wnum0(dat));
5223
5448
  }
5224
5449
 
5450
+ /* :nodoc: */
5225
5451
  static VALUE
5226
5452
  d_lite_wnum1(VALUE self)
5227
5453
  {
@@ -5232,11 +5458,12 @@ d_lite_wnum1(VALUE self)
5232
5458
 
5233
5459
  /*
5234
5460
  * call-seq:
5235
- * d.wday -> fixnum
5461
+ * wday -> integer
5236
5462
  *
5237
- * Returns the day of week (0-6, Sunday is zero).
5463
+ * Returns the day of week in range (0..6); Sunday is 0:
5464
+ *
5465
+ * Date.new(2001, 2, 3).wday # => 6
5238
5466
  *
5239
- * Date.new(2001,2,3).wday #=> 6
5240
5467
  */
5241
5468
  static VALUE
5242
5469
  d_lite_wday(VALUE self)
@@ -5247,9 +5474,9 @@ d_lite_wday(VALUE self)
5247
5474
 
5248
5475
  /*
5249
5476
  * call-seq:
5250
- * d.sunday? -> bool
5477
+ * sunday? -> true or false
5251
5478
  *
5252
- * Returns true if the date is Sunday.
5479
+ * Returns +true+ if +self+ is a Sunday, +false+ otherwise.
5253
5480
  */
5254
5481
  static VALUE
5255
5482
  d_lite_sunday_p(VALUE self)
@@ -5260,9 +5487,9 @@ d_lite_sunday_p(VALUE self)
5260
5487
 
5261
5488
  /*
5262
5489
  * call-seq:
5263
- * d.monday? -> bool
5490
+ * monday? -> true or false
5264
5491
  *
5265
- * Returns true if the date is Monday.
5492
+ * Returns +true+ if +self+ is a Monday, +false+ otherwise.
5266
5493
  */
5267
5494
  static VALUE
5268
5495
  d_lite_monday_p(VALUE self)
@@ -5273,9 +5500,9 @@ d_lite_monday_p(VALUE self)
5273
5500
 
5274
5501
  /*
5275
5502
  * call-seq:
5276
- * d.tuesday? -> bool
5503
+ * tuesday? -> true or false
5277
5504
  *
5278
- * Returns true if the date is Tuesday.
5505
+ * Returns +true+ if +self+ is a Tuesday, +false+ otherwise.
5279
5506
  */
5280
5507
  static VALUE
5281
5508
  d_lite_tuesday_p(VALUE self)
@@ -5286,9 +5513,9 @@ d_lite_tuesday_p(VALUE self)
5286
5513
 
5287
5514
  /*
5288
5515
  * call-seq:
5289
- * d.wednesday? -> bool
5516
+ * wednesday? -> true or false
5290
5517
  *
5291
- * Returns true if the date is Wednesday.
5518
+ * Returns +true+ if +self+ is a Wednesday, +false+ otherwise.
5292
5519
  */
5293
5520
  static VALUE
5294
5521
  d_lite_wednesday_p(VALUE self)
@@ -5299,9 +5526,9 @@ d_lite_wednesday_p(VALUE self)
5299
5526
 
5300
5527
  /*
5301
5528
  * call-seq:
5302
- * d.thursday? -> bool
5529
+ * thursday? -> true or false
5303
5530
  *
5304
- * Returns true if the date is Thursday.
5531
+ * Returns +true+ if +self+ is a Thursday, +false+ otherwise.
5305
5532
  */
5306
5533
  static VALUE
5307
5534
  d_lite_thursday_p(VALUE self)
@@ -5312,9 +5539,9 @@ d_lite_thursday_p(VALUE self)
5312
5539
 
5313
5540
  /*
5314
5541
  * call-seq:
5315
- * d.friday? -> bool
5542
+ * friday? -> true or false
5316
5543
  *
5317
- * Returns true if the date is Friday.
5544
+ * Returns +true+ if +self+ is a Friday, +false+ otherwise.
5318
5545
  */
5319
5546
  static VALUE
5320
5547
  d_lite_friday_p(VALUE self)
@@ -5325,9 +5552,9 @@ d_lite_friday_p(VALUE self)
5325
5552
 
5326
5553
  /*
5327
5554
  * call-seq:
5328
- * d.saturday? -> bool
5555
+ * saturday? -> true or false
5329
5556
  *
5330
- * Returns true if the date is Saturday.
5557
+ * Returns +true+ if +self+ is a Saturday, +false+ otherwise.
5331
5558
  */
5332
5559
  static VALUE
5333
5560
  d_lite_saturday_p(VALUE self)
@@ -5337,6 +5564,7 @@ d_lite_saturday_p(VALUE self)
5337
5564
  }
5338
5565
 
5339
5566
  #ifndef NDEBUG
5567
+ /* :nodoc: */
5340
5568
  static VALUE
5341
5569
  d_lite_nth_kday_p(VALUE self, VALUE n, VALUE k)
5342
5570
  {
@@ -5358,11 +5586,12 @@ d_lite_nth_kday_p(VALUE self, VALUE n, VALUE k)
5358
5586
 
5359
5587
  /*
5360
5588
  * call-seq:
5361
- * d.hour -> fixnum
5589
+ * hour -> integer
5362
5590
  *
5363
- * Returns the hour (0-23).
5591
+ * Returns the hour in range (0..23):
5592
+ *
5593
+ * DateTime.new(2001, 2, 3, 4, 5, 6).hour # => 4
5364
5594
  *
5365
- * DateTime.new(2001,2,3,4,5,6).hour #=> 4
5366
5595
  */
5367
5596
  static VALUE
5368
5597
  d_lite_hour(VALUE self)
@@ -5373,12 +5602,13 @@ d_lite_hour(VALUE self)
5373
5602
 
5374
5603
  /*
5375
5604
  * call-seq:
5376
- * d.min -> fixnum
5377
- * d.minute -> fixnum
5605
+ * min -> integer
5606
+ *
5607
+ * Returns the minute in range (0..59):
5378
5608
  *
5379
- * Returns the minute (0-59).
5609
+ * DateTime.new(2001, 2, 3, 4, 5, 6).min # => 5
5380
5610
  *
5381
- * DateTime.new(2001,2,3,4,5,6).min #=> 5
5611
+ * Date#minute is an alias for Date#min.
5382
5612
  */
5383
5613
  static VALUE
5384
5614
  d_lite_min(VALUE self)
@@ -5389,12 +5619,13 @@ d_lite_min(VALUE self)
5389
5619
 
5390
5620
  /*
5391
5621
  * call-seq:
5392
- * d.sec -> fixnum
5393
- * d.second -> fixnum
5622
+ * sec -> integer
5623
+ *
5624
+ * Returns the second in range (0..59):
5394
5625
  *
5395
- * Returns the second (0-59).
5626
+ * DateTime.new(2001, 2, 3, 4, 5, 6).sec # => 6
5396
5627
  *
5397
- * DateTime.new(2001,2,3,4,5,6).sec #=> 6
5628
+ * Date#second is an alias for Date#sec.
5398
5629
  */
5399
5630
  static VALUE
5400
5631
  d_lite_sec(VALUE self)
@@ -5405,12 +5636,14 @@ d_lite_sec(VALUE self)
5405
5636
 
5406
5637
  /*
5407
5638
  * call-seq:
5408
- * d.sec_fraction -> rational
5409
- * d.second_fraction -> rational
5639
+ * sec_fraction -> rational
5410
5640
  *
5411
- * Returns the fractional part of the second.
5641
+ * Returns the fractional part of the second in range
5642
+ * (Rational(0, 1)...Rational(1, 1)):
5412
5643
  *
5413
- * DateTime.new(2001,2,3,4,5,6.5).sec_fraction #=> (1/2)
5644
+ * DateTime.new(2001, 2, 3, 4, 5, 6.5).sec_fraction # => (1/2)
5645
+ *
5646
+ * Date#second_fraction is an alias for Date#sec_fraction.
5414
5647
  */
5415
5648
  static VALUE
5416
5649
  d_lite_sec_fraction(VALUE self)
@@ -5451,12 +5684,14 @@ d_lite_zone(VALUE self)
5451
5684
 
5452
5685
  /*
5453
5686
  * call-seq:
5454
- * d.julian? -> bool
5687
+ * d.julian? -> true or false
5688
+ *
5689
+ * Returns +true+ if the date is before the date of calendar reform,
5690
+ * +false+ otherwise:
5455
5691
  *
5456
- * Returns true if the date is before the day of calendar reform.
5692
+ * (Date.new(1582, 10, 15) - 1).julian? # => true
5693
+ * Date.new(1582, 10, 15).julian? # => false
5457
5694
  *
5458
- * Date.new(1582,10,15).julian? #=> false
5459
- * (Date.new(1582,10,15) - 1).julian? #=> true
5460
5695
  */
5461
5696
  static VALUE
5462
5697
  d_lite_julian_p(VALUE self)
@@ -5467,12 +5702,14 @@ d_lite_julian_p(VALUE self)
5467
5702
 
5468
5703
  /*
5469
5704
  * call-seq:
5470
- * d.gregorian? -> bool
5705
+ * gregorian? -> true or false
5471
5706
  *
5472
- * Returns true if the date is on or after the day of calendar reform.
5707
+ * Returns +true+ if the date is on or after
5708
+ * the date of calendar reform, +false+ otherwise:
5709
+ *
5710
+ * Date.new(1582, 10, 15).gregorian? # => true
5711
+ * (Date.new(1582, 10, 15) - 1).gregorian? # => false
5473
5712
  *
5474
- * Date.new(1582,10,15).gregorian? #=> true
5475
- * (Date.new(1582,10,15) - 1).gregorian? #=> false
5476
5713
  */
5477
5714
  static VALUE
5478
5715
  d_lite_gregorian_p(VALUE self)
@@ -5483,12 +5720,13 @@ d_lite_gregorian_p(VALUE self)
5483
5720
 
5484
5721
  /*
5485
5722
  * call-seq:
5486
- * d.leap? -> bool
5723
+ * leap? -> true or false
5724
+ *
5725
+ * Returns +true+ if the year is a leap year, +false+ otherwise:
5487
5726
  *
5488
- * Returns true if the year is a leap year.
5727
+ * Date.new(2000).leap? # => true
5728
+ * Date.new(2001).leap? # => false
5489
5729
  *
5490
- * Date.new(2000).leap? #=> true
5491
- * Date.new(2001).leap? #=> false
5492
5730
  */
5493
5731
  static VALUE
5494
5732
  d_lite_leap_p(VALUE self)
@@ -5507,12 +5745,25 @@ d_lite_leap_p(VALUE self)
5507
5745
 
5508
5746
  /*
5509
5747
  * call-seq:
5510
- * d.start -> float
5748
+ * start -> float
5749
+ *
5750
+ * Returns the Julian start date for calendar reform;
5751
+ * if not an infinity, the returned value is suitable
5752
+ * for passing to Date#jd:
5753
+ *
5754
+ * d = Date.new(2001, 2, 3, Date::ITALY)
5755
+ * s = d.start # => 2299161.0
5756
+ * Date.jd(s).to_s # => "1582-10-15"
5511
5757
  *
5512
- * Returns the Julian day number denoting the day of calendar reform.
5758
+ * d = Date.new(2001, 2, 3, Date::ENGLAND)
5759
+ * s = d.start # => 2361222.0
5760
+ * Date.jd(s).to_s # => "1752-09-14"
5761
+ *
5762
+ * Date.new(2001, 2, 3, Date::GREGORIAN).start # => -Infinity
5763
+ * Date.new(2001, 2, 3, Date::JULIAN).start # => Infinity
5764
+ *
5765
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
5513
5766
  *
5514
- * Date.new(2001,2,3).start #=> 2299161.0
5515
- * Date.new(2001,2,3,Date::GREGORIAN).start #=> -Infinity
5516
5767
  */
5517
5768
  static VALUE
5518
5769
  d_lite_start(VALUE self)
@@ -5577,12 +5828,17 @@ dup_obj_with_new_start(VALUE obj, double sg)
5577
5828
 
5578
5829
  /*
5579
5830
  * call-seq:
5580
- * d.new_start([start=Date::ITALY]) -> date
5831
+ * new_start(start = Date::ITALY]) -> new_date
5832
+ *
5833
+ * Returns a copy of +self+ with the given +start+ value:
5581
5834
  *
5582
- * Duplicates self and resets its day of calendar reform.
5835
+ * d0 = Date.new(2000, 2, 3)
5836
+ * d0.julian? # => false
5837
+ * d1 = d0.new_start(Date::JULIAN)
5838
+ * d1.julian? # => true
5839
+ *
5840
+ * See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
5583
5841
  *
5584
- * d = Date.new(1582,10,15)
5585
- * d.new_start(Date::JULIAN) #=> #<Date: 1582-10-05 ...>
5586
5842
  */
5587
5843
  static VALUE
5588
5844
  d_lite_new_start(int argc, VALUE *argv, VALUE self)
@@ -5601,9 +5857,10 @@ d_lite_new_start(int argc, VALUE *argv, VALUE self)
5601
5857
 
5602
5858
  /*
5603
5859
  * call-seq:
5604
- * d.italy -> date
5860
+ * italy -> new_date
5861
+ *
5862
+ * Equivalent to Date#new_start with argument Date::ITALY.
5605
5863
  *
5606
- * This method is equivalent to new_start(Date::ITALY).
5607
5864
  */
5608
5865
  static VALUE
5609
5866
  d_lite_italy(VALUE self)
@@ -5613,9 +5870,9 @@ d_lite_italy(VALUE self)
5613
5870
 
5614
5871
  /*
5615
5872
  * call-seq:
5616
- * d.england -> date
5873
+ * england -> new_date
5617
5874
  *
5618
- * This method is equivalent to new_start(Date::ENGLAND).
5875
+ * Equivalent to Date#new_start with argument Date::ENGLAND.
5619
5876
  */
5620
5877
  static VALUE
5621
5878
  d_lite_england(VALUE self)
@@ -5625,9 +5882,9 @@ d_lite_england(VALUE self)
5625
5882
 
5626
5883
  /*
5627
5884
  * call-seq:
5628
- * d.julian -> date
5885
+ * julian -> new_date
5629
5886
  *
5630
- * This method is equivalent to new_start(Date::JULIAN).
5887
+ * Equivalent to Date#new_start with argument Date::JULIAN.
5631
5888
  */
5632
5889
  static VALUE
5633
5890
  d_lite_julian(VALUE self)
@@ -5637,9 +5894,9 @@ d_lite_julian(VALUE self)
5637
5894
 
5638
5895
  /*
5639
5896
  * call-seq:
5640
- * d.gregorian -> date
5897
+ * gregorian -> new_date
5641
5898
  *
5642
- * This method is equivalent to new_start(Date::GREGORIAN).
5899
+ * Equivalent to Date#new_start with argument Date::GREGORIAN.
5643
5900
  */
5644
5901
  static VALUE
5645
5902
  d_lite_gregorian(VALUE self)
@@ -6120,9 +6377,9 @@ d_lite_minus(VALUE self, VALUE other)
6120
6377
 
6121
6378
  /*
6122
6379
  * call-seq:
6123
- * d.next_day([n=1]) -> date
6380
+ * next_day(n = 1) -> new_date
6124
6381
  *
6125
- * This method is equivalent to d + n.
6382
+ * Equivalent to Date#+ with argument +n+.
6126
6383
  */
6127
6384
  static VALUE
6128
6385
  d_lite_next_day(int argc, VALUE *argv, VALUE self)
@@ -6137,9 +6394,9 @@ d_lite_next_day(int argc, VALUE *argv, VALUE self)
6137
6394
 
6138
6395
  /*
6139
6396
  * call-seq:
6140
- * d.prev_day([n=1]) -> date
6397
+ * prev_day(n = 1) -> new_date
6141
6398
  *
6142
- * This method is equivalent to d - n.
6399
+ * Equivalent to Date#- with argument +n+.
6143
6400
  */
6144
6401
  static VALUE
6145
6402
  d_lite_prev_day(int argc, VALUE *argv, VALUE self)
@@ -6154,10 +6411,15 @@ d_lite_prev_day(int argc, VALUE *argv, VALUE self)
6154
6411
 
6155
6412
  /*
6156
6413
  * call-seq:
6157
- * d.succ -> date
6158
- * d.next -> date
6414
+ * d.next -> new_date
6159
6415
  *
6160
- * Returns a date object denoting the following day.
6416
+ * Returns a new \Date object representing the following day:
6417
+ *
6418
+ * d = Date.new(2001, 2, 3)
6419
+ * d.to_s # => "2001-02-03"
6420
+ * d.next.to_s # => "2001-02-04"
6421
+ *
6422
+ * Date#succ is an alias for Date#next.
6161
6423
  */
6162
6424
  static VALUE
6163
6425
  d_lite_next(VALUE self)
@@ -6167,26 +6429,30 @@ d_lite_next(VALUE self)
6167
6429
 
6168
6430
  /*
6169
6431
  * call-seq:
6170
- * d >> n -> date
6432
+ * d >> n -> new_date
6171
6433
  *
6172
- * Returns a date object pointing +n+ months after self.
6173
- * The argument +n+ should be a numeric value.
6434
+ * Returns a new \Date object representing the date
6435
+ * +n+ months later; +n+ should be a numeric:
6174
6436
  *
6175
- * Date.new(2001,2,3) >> 1 #=> #<Date: 2001-03-03 ...>
6176
- * Date.new(2001,2,3) >> -2 #=> #<Date: 2000-12-03 ...>
6437
+ * (Date.new(2001, 2, 3) >> 1).to_s # => "2001-03-03"
6438
+ * (Date.new(2001, 2, 3) >> -2).to_s # => "2000-12-03"
6177
6439
  *
6178
- * When the same day does not exist for the corresponding month,
6179
- * the last day of the month is used instead:
6440
+ * When the same day does not exist for the new month,
6441
+ * the last day of that month is used instead:
6180
6442
  *
6181
- * Date.new(2001,1,28) >> 1 #=> #<Date: 2001-02-28 ...>
6182
- * Date.new(2001,1,31) >> 1 #=> #<Date: 2001-02-28 ...>
6443
+ * (Date.new(2001, 1, 31) >> 1).to_s # => "2001-02-28"
6444
+ * (Date.new(2001, 1, 31) >> -4).to_s # => "2000-09-30"
6183
6445
  *
6184
- * This also results in the following, possibly unexpected, behavior:
6446
+ * This results in the following, possibly unexpected, behaviors:
6185
6447
  *
6186
- * Date.new(2001,1,31) >> 2 #=> #<Date: 2001-03-31 ...>
6187
- * Date.new(2001,1,31) >> 1 >> 1 #=> #<Date: 2001-03-28 ...>
6448
+ * d0 = Date.new(2001, 1, 31)
6449
+ * d1 = d0 >> 1 # => #<Date: 2001-02-28>
6450
+ * d2 = d1 >> 1 # => #<Date: 2001-03-28>
6451
+ *
6452
+ * d0 = Date.new(2001, 1, 31)
6453
+ * d1 = d0 >> 1 # => #<Date: 2001-02-28>
6454
+ * d2 = d1 >> -1 # => #<Date: 2001-01-28>
6188
6455
  *
6189
- * Date.new(2001,1,31) >> 1 >> -1 #=> #<Date: 2001-01-28 ...>
6190
6456
  */
6191
6457
  static VALUE
6192
6458
  d_lite_rshift(VALUE self, VALUE other)
@@ -6231,24 +6497,28 @@ d_lite_rshift(VALUE self, VALUE other)
6231
6497
  * call-seq:
6232
6498
  * d << n -> date
6233
6499
  *
6234
- * Returns a date object pointing +n+ months before self.
6235
- * The argument +n+ should be a numeric value.
6500
+ * Returns a new \Date object representing the date
6501
+ * +n+ months earlier; +n+ should be a numeric:
6502
+ *
6503
+ * (Date.new(2001, 2, 3) << 1).to_s # => "2001-01-03"
6504
+ * (Date.new(2001, 2, 3) << -2).to_s # => "2001-04-03"
6236
6505
  *
6237
- * Date.new(2001,2,3) << 1 #=> #<Date: 2001-01-03 ...>
6238
- * Date.new(2001,2,3) << -2 #=> #<Date: 2001-04-03 ...>
6506
+ * When the same day does not exist for the new month,
6507
+ * the last day of that month is used instead:
6239
6508
  *
6240
- * When the same day does not exist for the corresponding month,
6241
- * the last day of the month is used instead:
6509
+ * (Date.new(2001, 3, 31) << 1).to_s # => "2001-02-28"
6510
+ * (Date.new(2001, 3, 31) << -6).to_s # => "2001-09-30"
6242
6511
  *
6243
- * Date.new(2001,3,28) << 1 #=> #<Date: 2001-02-28 ...>
6244
- * Date.new(2001,3,31) << 1 #=> #<Date: 2001-02-28 ...>
6512
+ * This results in the following, possibly unexpected, behaviors:
6245
6513
  *
6246
- * This also results in the following, possibly unexpected, behavior:
6514
+ * d0 = Date.new(2001, 3, 31)
6515
+ * d0 << 2 # => #<Date: 2001-01-31>
6516
+ * d0 << 1 << 1 # => #<Date: 2001-01-28>
6247
6517
  *
6248
- * Date.new(2001,3,31) << 2 #=> #<Date: 2001-01-31 ...>
6249
- * Date.new(2001,3,31) << 1 << 1 #=> #<Date: 2001-01-28 ...>
6518
+ * d0 = Date.new(2001, 3, 31)
6519
+ * d1 = d0 << 1 # => #<Date: 2001-02-28>
6520
+ * d2 = d1 << -1 # => #<Date: 2001-03-28>
6250
6521
  *
6251
- * Date.new(2001,3,31) << 1 << -1 #=> #<Date: 2001-03-28 ...>
6252
6522
  */
6253
6523
  static VALUE
6254
6524
  d_lite_lshift(VALUE self, VALUE other)
@@ -6259,11 +6529,9 @@ d_lite_lshift(VALUE self, VALUE other)
6259
6529
 
6260
6530
  /*
6261
6531
  * call-seq:
6262
- * d.next_month([n=1]) -> date
6532
+ * next_month(n = 1) -> new_date
6263
6533
  *
6264
- * This method is equivalent to d >> n.
6265
- *
6266
- * See Date#>> for examples.
6534
+ * Equivalent to #>> with argument +n+.
6267
6535
  */
6268
6536
  static VALUE
6269
6537
  d_lite_next_month(int argc, VALUE *argv, VALUE self)
@@ -6278,11 +6546,9 @@ d_lite_next_month(int argc, VALUE *argv, VALUE self)
6278
6546
 
6279
6547
  /*
6280
6548
  * call-seq:
6281
- * d.prev_month([n=1]) -> date
6282
- *
6283
- * This method is equivalent to d << n.
6549
+ * prev_month(n = 1) -> new_date
6284
6550
  *
6285
- * See Date#<< for examples.
6551
+ * Equivalent to #<< with argument +n+.
6286
6552
  */
6287
6553
  static VALUE
6288
6554
  d_lite_prev_month(int argc, VALUE *argv, VALUE self)
@@ -6297,15 +6563,9 @@ d_lite_prev_month(int argc, VALUE *argv, VALUE self)
6297
6563
 
6298
6564
  /*
6299
6565
  * call-seq:
6300
- * d.next_year([n=1]) -> date
6301
- *
6302
- * This method is equivalent to d >> (n * 12).
6566
+ * next_year(n = 1) -> new_date
6303
6567
  *
6304
- * Date.new(2001,2,3).next_year #=> #<Date: 2002-02-03 ...>
6305
- * Date.new(2008,2,29).next_year #=> #<Date: 2009-02-28 ...>
6306
- * Date.new(2008,2,29).next_year(4) #=> #<Date: 2012-02-29 ...>
6307
- *
6308
- * See also Date#>>.
6568
+ * Equivalent to #>> with argument <tt>n * 12</tt>.
6309
6569
  */
6310
6570
  static VALUE
6311
6571
  d_lite_next_year(int argc, VALUE *argv, VALUE self)
@@ -6320,15 +6580,9 @@ d_lite_next_year(int argc, VALUE *argv, VALUE self)
6320
6580
 
6321
6581
  /*
6322
6582
  * call-seq:
6323
- * d.prev_year([n=1]) -> date
6324
- *
6325
- * This method is equivalent to d << (n * 12).
6583
+ * prev_year(n = 1) -> new_date
6326
6584
  *
6327
- * Date.new(2001,2,3).prev_year #=> #<Date: 2000-02-03 ...>
6328
- * Date.new(2008,2,29).prev_year #=> #<Date: 2007-02-28 ...>
6329
- * Date.new(2008,2,29).prev_year(4) #=> #<Date: 2004-02-29 ...>
6330
- *
6331
- * See also Date#<<.
6585
+ * Equivalent to #<< with argument <tt>n * 12</tt>.
6332
6586
  */
6333
6587
  static VALUE
6334
6588
  d_lite_prev_year(int argc, VALUE *argv, VALUE self)
@@ -6345,14 +6599,33 @@ static VALUE d_lite_cmp(VALUE, VALUE);
6345
6599
 
6346
6600
  /*
6347
6601
  * call-seq:
6348
- * d.step(limit[, step=1]) -> enumerator
6349
- * d.step(limit[, step=1]){|date| ...} -> self
6602
+ * step(limit, step = 1){|date| ... } -> self
6603
+ *
6604
+ * Calls the block with specified dates;
6605
+ * returns +self+.
6606
+ *
6607
+ * - The first +date+ is +self+.
6608
+ * - Each successive +date+ is <tt>date + step</tt>,
6609
+ * where +step+ is the numeric step size in days.
6610
+ * - The last date is the last one that is before or equal to +limit+,
6611
+ * which should be a \Date object.
6612
+ *
6613
+ * Example:
6614
+ *
6615
+ * limit = Date.new(2001, 12, 31)
6616
+ * Date.new(2001).step(limit){|date| p date.to_s if date.mday == 31 }
6350
6617
  *
6351
- * Iterates evaluation of the given block, which takes a date object.
6352
- * The limit should be a date object.
6618
+ * Output:
6353
6619
  *
6354
- * Date.new(2001).step(Date.new(2001,-1,-1)).select{|d| d.sunday?}.size
6355
- * #=> 52
6620
+ * "2001-01-31"
6621
+ * "2001-03-31"
6622
+ * "2001-05-31"
6623
+ * "2001-07-31"
6624
+ * "2001-08-31"
6625
+ * "2001-10-31"
6626
+ * "2001-12-31"
6627
+ *
6628
+ * Returns an Enumerator if no block is given.
6356
6629
  */
6357
6630
  static VALUE
6358
6631
  d_lite_step(int argc, VALUE *argv, VALUE self)
@@ -6395,10 +6668,9 @@ d_lite_step(int argc, VALUE *argv, VALUE self)
6395
6668
 
6396
6669
  /*
6397
6670
  * call-seq:
6398
- * d.upto(max) -> enumerator
6399
- * d.upto(max){|date| ...} -> self
6671
+ * upto(max){|date| ... } -> self
6400
6672
  *
6401
- * This method is equivalent to step(max, 1){|date| ...}.
6673
+ * Equivalent to #step with arguments +max+ and +1+.
6402
6674
  */
6403
6675
  static VALUE
6404
6676
  d_lite_upto(VALUE self, VALUE max)
@@ -6417,10 +6689,9 @@ d_lite_upto(VALUE self, VALUE max)
6417
6689
 
6418
6690
  /*
6419
6691
  * call-seq:
6420
- * d.downto(min) -> enumerator
6421
- * d.downto(min){|date| ...} -> self
6692
+ * downto(min){|date| ... } -> self
6422
6693
  *
6423
- * This method is equivalent to step(min, -1){|date| ...}.
6694
+ * Equivalent to #step with arguments +min+ and <tt>-1</tt>.
6424
6695
  */
6425
6696
  static VALUE
6426
6697
  d_lite_downto(VALUE self, VALUE min)
@@ -6508,19 +6779,43 @@ cmp_dd(VALUE self, VALUE other)
6508
6779
 
6509
6780
  /*
6510
6781
  * call-seq:
6511
- * d <=> other -> -1, 0, +1 or nil
6782
+ * self <=> other -> -1, 0, 1 or nil
6783
+ *
6784
+ * Compares +self+ and +other+, returning:
6785
+ *
6786
+ * - <tt>-1</tt> if +other+ is larger.
6787
+ * - <tt>0</tt> if the two are equal.
6788
+ * - <tt>1</tt> if +other+ is smaller.
6789
+ * - +nil+ if the two are incomparable.
6790
+ *
6791
+ * Argument +other+ may be:
6792
+ *
6793
+ * - Another \Date object:
6794
+ *
6795
+ * d = Date.new(2022, 7, 27) # => #<Date: 2022-07-27 ((2459788j,0s,0n),+0s,2299161j)>
6796
+ * prev_date = d.prev_day # => #<Date: 2022-07-26 ((2459787j,0s,0n),+0s,2299161j)>
6797
+ * next_date = d.next_day # => #<Date: 2022-07-28 ((2459789j,0s,0n),+0s,2299161j)>
6798
+ * d <=> next_date # => -1
6799
+ * d <=> d # => 0
6800
+ * d <=> prev_date # => 1
6801
+ *
6802
+ * - A DateTime object:
6803
+ *
6804
+ * d <=> DateTime.new(2022, 7, 26) # => 1
6805
+ * d <=> DateTime.new(2022, 7, 27) # => 0
6806
+ * d <=> DateTime.new(2022, 7, 28) # => -1
6807
+ *
6808
+ * - A numeric (compares <tt>self.ajd</tt> to +other+):
6512
6809
  *
6513
- * Compares the two dates and returns -1, zero, 1 or nil. The other
6514
- * should be a date object or a numeric value as an astronomical
6515
- * Julian day number.
6810
+ * d <=> 2459788 # => -1
6811
+ * d <=> 2459787 # => 1
6812
+ * d <=> 2459786 # => 1
6813
+ * d <=> d.ajd # => 0
6516
6814
  *
6517
- * Date.new(2001,2,3) <=> Date.new(2001,2,4) #=> -1
6518
- * Date.new(2001,2,3) <=> Date.new(2001,2,3) #=> 0
6519
- * Date.new(2001,2,3) <=> Date.new(2001,2,2) #=> 1
6520
- * Date.new(2001,2,3) <=> Object.new #=> nil
6521
- * Date.new(2001,2,3) <=> Rational(4903887,2) #=> 0
6815
+ * - Any other object:
6816
+ *
6817
+ * d <=> Object.new # => nil
6522
6818
  *
6523
- * See also Comparable.
6524
6819
  */
6525
6820
  static VALUE
6526
6821
  d_lite_cmp(VALUE self, VALUE other)
@@ -6580,20 +6875,39 @@ equal_gen(VALUE self, VALUE other)
6580
6875
 
6581
6876
  /*
6582
6877
  * call-seq:
6583
- * d === other -> bool
6584
- *
6585
- * Returns true if they are the same day.
6586
- *
6587
- * Date.new(2001,2,3) === Date.new(2001,2,3)
6588
- * #=> true
6589
- * Date.new(2001,2,3) === Date.new(2001,2,4)
6590
- * #=> false
6591
- * DateTime.new(2001,2,3) === DateTime.new(2001,2,3,12)
6592
- * #=> true
6593
- * DateTime.new(2001,2,3) === DateTime.new(2001,2,3,0,0,0,'+24:00')
6594
- * #=> true
6595
- * DateTime.new(2001,2,3) === DateTime.new(2001,2,4,0,0,0,'+24:00')
6596
- * #=> false
6878
+ * self === other -> true, false, or nil.
6879
+ *
6880
+ * Returns +true+ if +self+ and +other+ represent the same date,
6881
+ * +false+ if not, +nil+ if the two are not comparable.
6882
+ *
6883
+ * Argument +other+ may be:
6884
+ *
6885
+ * - Another \Date object:
6886
+ *
6887
+ * d = Date.new(2022, 7, 27) # => #<Date: 2022-07-27 ((2459788j,0s,0n),+0s,2299161j)>
6888
+ * prev_date = d.prev_day # => #<Date: 2022-07-26 ((2459787j,0s,0n),+0s,2299161j)>
6889
+ * next_date = d.next_day # => #<Date: 2022-07-28 ((2459789j,0s,0n),+0s,2299161j)>
6890
+ * d === prev_date # => false
6891
+ * d === d # => true
6892
+ * d === next_date # => false
6893
+ *
6894
+ * - A DateTime object:
6895
+ *
6896
+ * d === DateTime.new(2022, 7, 26) # => false
6897
+ * d === DateTime.new(2022, 7, 27) # => true
6898
+ * d === DateTime.new(2022, 7, 28) # => false
6899
+ *
6900
+ * - A numeric (compares <tt>self.jd</tt> to +other+):
6901
+ *
6902
+ * d === 2459788 # => true
6903
+ * d === 2459787 # => false
6904
+ * d === 2459786 # => false
6905
+ * d === d.jd # => true
6906
+ *
6907
+ * - An object not comparable:
6908
+ *
6909
+ * d === Object.new # => nil
6910
+ *
6597
6911
  */
6598
6912
  static VALUE
6599
6913
  d_lite_equal(VALUE self, VALUE other)
@@ -6656,12 +6970,14 @@ static VALUE strftimev(const char *, VALUE,
6656
6970
 
6657
6971
  /*
6658
6972
  * call-seq:
6659
- * d.to_s -> string
6973
+ * to_s -> string
6660
6974
  *
6661
- * Returns a string in an ISO 8601 format. (This method doesn't use the
6662
- * expanded representations.)
6975
+ * Returns a string representation of the date in +self+
6976
+ * in {ISO 8601 extended date format}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-ISO+8601+Format+Specifications]
6977
+ * (<tt>'%Y-%m-%d'</tt>):
6978
+ *
6979
+ * Date.new(2001, 2, 3).to_s # => "2001-02-03"
6663
6980
  *
6664
- * Date.new(2001,2,3).to_s #=> "2001-02-03"
6665
6981
  */
6666
6982
  static VALUE
6667
6983
  d_lite_to_s(VALUE self)
@@ -6670,6 +6986,7 @@ d_lite_to_s(VALUE self)
6670
6986
  }
6671
6987
 
6672
6988
  #ifndef NDEBUG
6989
+ /* :nodoc: */
6673
6990
  static VALUE
6674
6991
  mk_inspect_raw(union DateData *x, VALUE klass)
6675
6992
  {
@@ -6719,6 +7036,7 @@ mk_inspect_raw(union DateData *x, VALUE klass)
6719
7036
  }
6720
7037
  }
6721
7038
 
7039
+ /* :nodoc: */
6722
7040
  static VALUE
6723
7041
  d_lite_inspect_raw(VALUE self)
6724
7042
  {
@@ -6740,14 +7058,13 @@ mk_inspect(union DateData *x, VALUE klass, VALUE to_s)
6740
7058
 
6741
7059
  /*
6742
7060
  * call-seq:
6743
- * d.inspect -> string
7061
+ * inspect -> string
7062
+ *
7063
+ * Returns a string representation of +self+:
6744
7064
  *
6745
- * Returns the value as a string for inspection.
7065
+ * Date.new(2001, 2, 3).inspect
7066
+ * # => "#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>"
6746
7067
  *
6747
- * Date.new(2001,2,3).inspect
6748
- * #=> "#<Date: 2001-02-03>"
6749
- * DateTime.new(2001,2,3,4,5,6,'-7').inspect
6750
- * #=> "#<DateTime: 2001-02-03T04:05:06-07:00>"
6751
7068
  */
6752
7069
  static VALUE
6753
7070
  d_lite_inspect(VALUE self)
@@ -6929,180 +7246,16 @@ date_strftime_internal(int argc, VALUE *argv, VALUE self,
6929
7246
 
6930
7247
  /*
6931
7248
  * call-seq:
6932
- * d.strftime([format='%F']) -> string
6933
- *
6934
- * Formats date according to the directives in the given format
6935
- * string.
6936
- * The directives begin with a percent (%) character.
6937
- * Any text not listed as a directive will be passed through to the
6938
- * output string.
6939
- *
6940
- * A directive consists of a percent (%) character,
6941
- * zero or more flags, an optional minimum field width,
6942
- * an optional modifier, and a conversion specifier
6943
- * as follows.
6944
- *
6945
- * %<flags><width><modifier><conversion>
6946
- *
6947
- * Flags:
6948
- * - don't pad a numerical output.
6949
- * _ use spaces for padding.
6950
- * 0 use zeros for padding.
6951
- * ^ upcase the result string.
6952
- * # change case.
6953
- *
6954
- * The minimum field width specifies the minimum width.
6955
- *
6956
- * The modifiers are "E", "O", ":", "::" and ":::".
6957
- * "E" and "O" are ignored. No effect to result currently.
6958
- *
6959
- * Format directives:
6960
- *
6961
- * Date (Year, Month, Day):
6962
- * %Y - Year with century (can be negative, 4 digits at least)
6963
- * -0001, 0000, 1995, 2009, 14292, etc.
6964
- * %C - year / 100 (round down. 20 in 2009)
6965
- * %y - year % 100 (00..99)
6966
- *
6967
- * %m - Month of the year, zero-padded (01..12)
6968
- * %_m blank-padded ( 1..12)
6969
- * %-m no-padded (1..12)
6970
- * %B - The full month name (``January'')
6971
- * %^B uppercased (``JANUARY'')
6972
- * %b - The abbreviated month name (``Jan'')
6973
- * %^b uppercased (``JAN'')
6974
- * %h - Equivalent to %b
6975
- *
6976
- * %d - Day of the month, zero-padded (01..31)
6977
- * %-d no-padded (1..31)
6978
- * %e - Day of the month, blank-padded ( 1..31)
6979
- *
6980
- * %j - Day of the year (001..366)
6981
- *
6982
- * Time (Hour, Minute, Second, Subsecond):
6983
- * %H - Hour of the day, 24-hour clock, zero-padded (00..23)
6984
- * %k - Hour of the day, 24-hour clock, blank-padded ( 0..23)
6985
- * %I - Hour of the day, 12-hour clock, zero-padded (01..12)
6986
- * %l - Hour of the day, 12-hour clock, blank-padded ( 1..12)
6987
- * %P - Meridian indicator, lowercase (``am'' or ``pm'')
6988
- * %p - Meridian indicator, uppercase (``AM'' or ``PM'')
6989
- *
6990
- * %M - Minute of the hour (00..59)
6991
- *
6992
- * %S - Second of the minute (00..60)
6993
- *
6994
- * %L - Millisecond of the second (000..999)
6995
- * %N - Fractional seconds digits, default is 9 digits (nanosecond)
6996
- * %3N millisecond (3 digits) %15N femtosecond (15 digits)
6997
- * %6N microsecond (6 digits) %18N attosecond (18 digits)
6998
- * %9N nanosecond (9 digits) %21N zeptosecond (21 digits)
6999
- * %12N picosecond (12 digits) %24N yoctosecond (24 digits)
7000
- *
7001
- * Time zone:
7002
- * %z - Time zone as hour and minute offset from UTC (e.g. +0900)
7003
- * %:z - hour and minute offset from UTC with a colon (e.g. +09:00)
7004
- * %::z - hour, minute and second offset from UTC (e.g. +09:00:00)
7005
- * %:::z - hour, minute and second offset from UTC
7006
- * (e.g. +09, +09:30, +09:30:30)
7007
- * %Z - Equivalent to %:z (e.g. +09:00)
7008
- *
7009
- * Weekday:
7010
- * %A - The full weekday name (``Sunday'')
7011
- * %^A uppercased (``SUNDAY'')
7012
- * %a - The abbreviated name (``Sun'')
7013
- * %^a uppercased (``SUN'')
7014
- * %u - Day of the week (Monday is 1, 1..7)
7015
- * %w - Day of the week (Sunday is 0, 0..6)
7016
- *
7017
- * ISO 8601 week-based year and week number:
7018
- * The week 1 of YYYY starts with a Monday and includes YYYY-01-04.
7019
- * The days in the year before the first week are in the last week of
7020
- * the previous year.
7021
- * %G - The week-based year
7022
- * %g - The last 2 digits of the week-based year (00..99)
7023
- * %V - Week number of the week-based year (01..53)
7024
- *
7025
- * Week number:
7026
- * The week 1 of YYYY starts with a Sunday or Monday (according to %U
7027
- * or %W). The days in the year before the first week are in week 0.
7028
- * %U - Week number of the year. The week starts with Sunday. (00..53)
7029
- * %W - Week number of the year. The week starts with Monday. (00..53)
7030
- *
7031
- * Seconds since the Unix Epoch:
7032
- * %s - Number of seconds since 1970-01-01 00:00:00 UTC.
7033
- * %Q - Number of milliseconds since 1970-01-01 00:00:00 UTC.
7034
- *
7035
- * Literal string:
7036
- * %n - Newline character (\n)
7037
- * %t - Tab character (\t)
7038
- * %% - Literal ``%'' character
7039
- *
7040
- * Combination:
7041
- * %c - date and time (%a %b %e %T %Y)
7042
- * %D - Date (%m/%d/%y)
7043
- * %F - The ISO 8601 date format (%Y-%m-%d)
7044
- * %v - VMS date (%e-%^b-%Y)
7045
- * %x - Same as %D
7046
- * %X - Same as %T
7047
- * %r - 12-hour time (%I:%M:%S %p)
7048
- * %R - 24-hour time (%H:%M)
7049
- * %T - 24-hour time (%H:%M:%S)
7050
- * %+ - date(1) (%a %b %e %H:%M:%S %Z %Y)
7051
- *
7052
- * This method is similar to the strftime() function defined in ISO C
7053
- * and POSIX.
7054
- * Several directives (%a, %A, %b, %B, %c, %p, %r, %x, %X, %E*, %O* and %Z)
7055
- * are locale dependent in the function.
7056
- * However, this method is locale independent.
7057
- * So, the result may differ even if the same format string is used in other
7058
- * systems such as C.
7059
- * It is good practice to avoid %x and %X because there are corresponding
7060
- * locale independent representations, %D and %T.
7061
- *
7062
- * Examples:
7063
- *
7064
- * d = DateTime.new(2007,11,19,8,37,48,"-06:00")
7065
- * #=> #<DateTime: 2007-11-19T08:37:48-0600 ...>
7066
- * d.strftime("Printed on %m/%d/%Y") #=> "Printed on 11/19/2007"
7067
- * d.strftime("at %I:%M%p") #=> "at 08:37AM"
7068
- *
7069
- * Various ISO 8601 formats:
7070
- * %Y%m%d => 20071119 Calendar date (basic)
7071
- * %F => 2007-11-19 Calendar date (extended)
7072
- * %Y-%m => 2007-11 Calendar date, reduced accuracy, specific month
7073
- * %Y => 2007 Calendar date, reduced accuracy, specific year
7074
- * %C => 20 Calendar date, reduced accuracy, specific century
7075
- * %Y%j => 2007323 Ordinal date (basic)
7076
- * %Y-%j => 2007-323 Ordinal date (extended)
7077
- * %GW%V%u => 2007W471 Week date (basic)
7078
- * %G-W%V-%u => 2007-W47-1 Week date (extended)
7079
- * %GW%V => 2007W47 Week date, reduced accuracy, specific week (basic)
7080
- * %G-W%V => 2007-W47 Week date, reduced accuracy, specific week (extended)
7081
- * %H%M%S => 083748 Local time (basic)
7082
- * %T => 08:37:48 Local time (extended)
7083
- * %H%M => 0837 Local time, reduced accuracy, specific minute (basic)
7084
- * %H:%M => 08:37 Local time, reduced accuracy, specific minute (extended)
7085
- * %H => 08 Local time, reduced accuracy, specific hour
7086
- * %H%M%S,%L => 083748,000 Local time with decimal fraction, comma as decimal sign (basic)
7087
- * %T,%L => 08:37:48,000 Local time with decimal fraction, comma as decimal sign (extended)
7088
- * %H%M%S.%L => 083748.000 Local time with decimal fraction, full stop as decimal sign (basic)
7089
- * %T.%L => 08:37:48.000 Local time with decimal fraction, full stop as decimal sign (extended)
7090
- * %H%M%S%z => 083748-0600 Local time and the difference from UTC (basic)
7091
- * %T%:z => 08:37:48-06:00 Local time and the difference from UTC (extended)
7092
- * %Y%m%dT%H%M%S%z => 20071119T083748-0600 Date and time of day for calendar date (basic)
7093
- * %FT%T%:z => 2007-11-19T08:37:48-06:00 Date and time of day for calendar date (extended)
7094
- * %Y%jT%H%M%S%z => 2007323T083748-0600 Date and time of day for ordinal date (basic)
7095
- * %Y-%jT%T%:z => 2007-323T08:37:48-06:00 Date and time of day for ordinal date (extended)
7096
- * %GW%V%uT%H%M%S%z => 2007W471T083748-0600 Date and time of day for week date (basic)
7097
- * %G-W%V-%uT%T%:z => 2007-W47-1T08:37:48-06:00 Date and time of day for week date (extended)
7098
- * %Y%m%dT%H%M => 20071119T0837 Calendar date and local time (basic)
7099
- * %FT%R => 2007-11-19T08:37 Calendar date and local time (extended)
7100
- * %Y%jT%H%MZ => 2007323T0837Z Ordinal date and UTC of day (basic)
7101
- * %Y-%jT%RZ => 2007-323T08:37Z Ordinal date and UTC of day (extended)
7102
- * %GW%V%uT%H%M%z => 2007W471T0837-0600 Week date and local time and difference from UTC (basic)
7103
- * %G-W%V-%uT%R%:z => 2007-W47-1T08:37-06:00 Week date and local time and difference from UTC (extended)
7104
- *
7105
- * See also strftime(3) and ::strptime.
7249
+ * strftime(format = '%F') -> string
7250
+ *
7251
+ * Returns a string representation of the date in +self+,
7252
+ * formatted according the given +format+:
7253
+ *
7254
+ * Date.new(2001, 2, 3).strftime # => "2001-02-03"
7255
+ *
7256
+ * For other formats, see
7257
+ * {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html].
7258
+ *
7106
7259
  */
7107
7260
  static VALUE
7108
7261
  d_lite_strftime(int argc, VALUE *argv, VALUE self)
@@ -7130,13 +7283,17 @@ strftimev(const char *fmt, VALUE self,
7130
7283
 
7131
7284
  /*
7132
7285
  * call-seq:
7133
- * d.asctime -> string
7134
- * d.ctime -> string
7286
+ * asctime -> string
7287
+ *
7288
+ * Equivalent to #strftime with argument <tt>'%a %b %e %T %Y'</tt>
7289
+ * (or its {shorthand form}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-Shorthand+Conversion+Specifiers]
7290
+ * <tt>'%c'</tt>):
7135
7291
  *
7136
- * Returns a string in asctime(3) format (but without "\n\0" at the
7137
- * end). This method is equivalent to strftime('%c').
7292
+ * Date.new(2001, 2, 3).asctime # => "Sat Feb 3 00:00:00 2001"
7138
7293
  *
7139
- * See also asctime(3) or ctime(3).
7294
+ * See {asctime}[https://linux.die.net/man/3/asctime].
7295
+ *
7296
+ * Date#ctime is an alias for Date#asctime.
7140
7297
  */
7141
7298
  static VALUE
7142
7299
  d_lite_asctime(VALUE self)
@@ -7146,10 +7303,15 @@ d_lite_asctime(VALUE self)
7146
7303
 
7147
7304
  /*
7148
7305
  * call-seq:
7149
- * d.iso8601 -> string
7150
- * d.xmlschema -> string
7306
+ * iso8601 -> string
7307
+ *
7308
+ * Equivalent to #strftime with argument <tt>'%Y-%m-%d'</tt>
7309
+ * (or its {shorthand form}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-Shorthand+Conversion+Specifiers]
7310
+ * <tt>'%F'</tt>);
7311
+ *
7312
+ * Date.new(2001, 2, 3).iso8601 # => "2001-02-03"
7151
7313
  *
7152
- * This method is equivalent to strftime('%F').
7314
+ * Date#xmlschema is an alias for Date#iso8601.
7153
7315
  */
7154
7316
  static VALUE
7155
7317
  d_lite_iso8601(VALUE self)
@@ -7159,9 +7321,13 @@ d_lite_iso8601(VALUE self)
7159
7321
 
7160
7322
  /*
7161
7323
  * call-seq:
7162
- * d.rfc3339 -> string
7324
+ * rfc3339 -> string
7325
+ *
7326
+ * Equivalent to #strftime with argument <tt>'%FT%T%:z'</tt>;
7327
+ * see {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html]:
7328
+ *
7329
+ * Date.new(2001, 2, 3).rfc3339 # => "2001-02-03T00:00:00+00:00"
7163
7330
  *
7164
- * This method is equivalent to strftime('%FT%T%:z').
7165
7331
  */
7166
7332
  static VALUE
7167
7333
  d_lite_rfc3339(VALUE self)
@@ -7171,10 +7337,14 @@ d_lite_rfc3339(VALUE self)
7171
7337
 
7172
7338
  /*
7173
7339
  * call-seq:
7174
- * d.rfc2822 -> string
7175
- * d.rfc822 -> string
7340
+ * rfc2822 -> string
7341
+ *
7342
+ * Equivalent to #strftime with argument <tt>'%a, %-d %b %Y %T %z'</tt>;
7343
+ * see {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html]:
7344
+ *
7345
+ * Date.new(2001, 2, 3).rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000"
7176
7346
  *
7177
- * This method is equivalent to strftime('%a, %-d %b %Y %T %z').
7347
+ * Date#rfc822 is an alias for Date#rfc2822.
7178
7348
  */
7179
7349
  static VALUE
7180
7350
  d_lite_rfc2822(VALUE self)
@@ -7184,10 +7354,13 @@ d_lite_rfc2822(VALUE self)
7184
7354
 
7185
7355
  /*
7186
7356
  * call-seq:
7187
- * d.httpdate -> string
7357
+ * httpdate -> string
7358
+ *
7359
+ * Equivalent to #strftime with argument <tt>'%a, %d %b %Y %T GMT'</tt>;
7360
+ * see {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html]:
7361
+ *
7362
+ * Date.new(2001, 2, 3).httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT"
7188
7363
  *
7189
- * This method is equivalent to strftime('%a, %d %b %Y %T GMT').
7190
- * See also RFC 2616.
7191
7364
  */
7192
7365
  static VALUE
7193
7366
  d_lite_httpdate(VALUE self)
@@ -7238,11 +7411,13 @@ jisx0301_date_format(char *fmt, size_t size, VALUE jd, VALUE y)
7238
7411
 
7239
7412
  /*
7240
7413
  * call-seq:
7241
- * d.jisx0301 -> string
7414
+ * jisx0301 -> string
7242
7415
  *
7243
- * Returns a string in a JIS X 0301 format.
7416
+ * Returns a string representation of the date in +self+
7417
+ * in JIS X 0301 format.
7418
+ *
7419
+ * Date.new(2001, 2, 3).jisx0301 # => "H13.02.03"
7244
7420
  *
7245
- * Date.new(2001,2,3).jisx0301 #=> "H13.02.03"
7246
7421
  */
7247
7422
  static VALUE
7248
7423
  d_lite_jisx0301(VALUE self)
@@ -7258,6 +7433,7 @@ d_lite_jisx0301(VALUE self)
7258
7433
  }
7259
7434
 
7260
7435
  #ifndef NDEBUG
7436
+ /* :nodoc: */
7261
7437
  static VALUE
7262
7438
  d_lite_marshal_dump_old(VALUE self)
7263
7439
  {
@@ -7545,17 +7721,7 @@ datetime_s_ordinal(int argc, VALUE *argv, VALUE klass)
7545
7721
  }
7546
7722
 
7547
7723
  /*
7548
- * call-seq:
7549
- * DateTime.civil([year=-4712[, month=1[, mday=1[, hour=0[, minute=0[, second=0[, offset=0[, start=Date::ITALY]]]]]]]]) -> datetime
7550
- * DateTime.new([year=-4712[, month=1[, mday=1[, hour=0[, minute=0[, second=0[, offset=0[, start=Date::ITALY]]]]]]]]) -> datetime
7551
- *
7552
- * Creates a DateTime object denoting the given calendar date.
7553
- *
7554
- * DateTime.new(2001,2,3) #=> #<DateTime: 2001-02-03T00:00:00+00:00 ...>
7555
- * DateTime.new(2001,2,3,4,5,6,'+7')
7556
- * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
7557
- * DateTime.new(2001,-11,-26,-20,-55,-54,'+7')
7558
- * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
7724
+ * Same as DateTime.new.
7559
7725
  */
7560
7726
  static VALUE
7561
7727
  datetime_s_civil(int argc, VALUE *argv, VALUE klass)
@@ -7745,6 +7911,7 @@ datetime_s_commercial(int argc, VALUE *argv, VALUE klass)
7745
7911
  }
7746
7912
 
7747
7913
  #ifndef NDEBUG
7914
+ /* :nodoc: */
7748
7915
  static VALUE
7749
7916
  datetime_s_weeknum(int argc, VALUE *argv, VALUE klass)
7750
7917
  {
@@ -7814,6 +7981,7 @@ datetime_s_weeknum(int argc, VALUE *argv, VALUE klass)
7814
7981
  return ret;
7815
7982
  }
7816
7983
 
7984
+ /* :nodoc: */
7817
7985
  static VALUE
7818
7986
  datetime_s_nth_kday(int argc, VALUE *argv, VALUE klass)
7819
7987
  {
@@ -8159,9 +8327,9 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass)
8159
8327
  * Parses the given representation of date and time, and creates a
8160
8328
  * DateTime object.
8161
8329
  *
8162
- * This method *does not* function as a validator. If the input
8330
+ * This method *does* *not* function as a validator. If the input
8163
8331
  * string does not match valid formats strictly, you may get a cryptic
8164
- * result. Should consider to use `DateTime.strptime` instead of this
8332
+ * result. Should consider to use DateTime.strptime instead of this
8165
8333
  * method as possible.
8166
8334
  *
8167
8335
  * If the optional second argument is true and the detected year is in
@@ -8175,8 +8343,8 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass)
8175
8343
  * #=> #<DateTime: 2001-02-03T16:05:06+00:00 ...>
8176
8344
  *
8177
8345
  * Raise an ArgumentError when the string length is longer than _limit_.
8178
- * You can stop this check by passing `limit: nil`, but note that
8179
- * it may take a long time to parse.
8346
+ * You can stop this check by passing <code>limit: nil</code>, but note
8347
+ * that it may take a long time to parse.
8180
8348
  */
8181
8349
  static VALUE
8182
8350
  datetime_s_parse(int argc, VALUE *argv, VALUE klass)
@@ -8197,12 +8365,12 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass)
8197
8365
 
8198
8366
  {
8199
8367
  int argc2 = 2;
8200
- VALUE argv2[3];
8368
+ VALUE argv2[3], hash;
8201
8369
  argv2[0] = str;
8202
8370
  argv2[1] = comp;
8203
8371
  argv2[2] = opt;
8204
8372
  if (!NIL_P(opt)) argc2++;
8205
- VALUE hash = date_s__parse(argc2, argv2, klass);
8373
+ hash = date_s__parse(argc2, argv2, klass);
8206
8374
  return dt_new_by_frags(klass, hash, sg);
8207
8375
  }
8208
8376
  }
@@ -8222,8 +8390,8 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass)
8222
8390
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8223
8391
  *
8224
8392
  * Raise an ArgumentError when the string length is longer than _limit_.
8225
- * You can stop this check by passing `limit: nil`, but note that
8226
- * it may take a long time to parse.
8393
+ * You can stop this check by passing <code>limit: nil</code>, but note
8394
+ * that it may take a long time to parse.
8227
8395
  */
8228
8396
  static VALUE
8229
8397
  datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
@@ -8242,11 +8410,11 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
8242
8410
 
8243
8411
  {
8244
8412
  int argc2 = 1;
8245
- VALUE argv2[2];
8413
+ VALUE argv2[2], hash;
8246
8414
  argv2[0] = str;
8247
8415
  argv2[1] = opt;
8248
8416
  if (!NIL_P(opt)) argc2--;
8249
- VALUE hash = date_s__iso8601(argc2, argv2, klass);
8417
+ hash = date_s__iso8601(argc2, argv2, klass);
8250
8418
  return dt_new_by_frags(klass, hash, sg);
8251
8419
  }
8252
8420
  }
@@ -8262,8 +8430,8 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
8262
8430
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8263
8431
  *
8264
8432
  * Raise an ArgumentError when the string length is longer than _limit_.
8265
- * You can stop this check by passing `limit: nil`, but note that
8266
- * it may take a long time to parse.
8433
+ * You can stop this check by passing <code>limit: nil</code>, but note
8434
+ * that it may take a long time to parse.
8267
8435
  */
8268
8436
  static VALUE
8269
8437
  datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
@@ -8282,11 +8450,11 @@ datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
8282
8450
 
8283
8451
  {
8284
8452
  int argc2 = 1;
8285
- VALUE argv2[2];
8453
+ VALUE argv2[2], hash;
8286
8454
  argv2[0] = str;
8287
8455
  argv2[1] = opt;
8288
8456
  if (!NIL_P(opt)) argc2++;
8289
- VALUE hash = date_s__rfc3339(argc2, argv2, klass);
8457
+ hash = date_s__rfc3339(argc2, argv2, klass);
8290
8458
  return dt_new_by_frags(klass, hash, sg);
8291
8459
  }
8292
8460
  }
@@ -8302,8 +8470,8 @@ datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
8302
8470
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8303
8471
  *
8304
8472
  * Raise an ArgumentError when the string length is longer than _limit_.
8305
- * You can stop this check by passing `limit: nil`, but note that
8306
- * it may take a long time to parse.
8473
+ * You can stop this check by passing <code>limit: nil</code>, but note
8474
+ * that it may take a long time to parse.
8307
8475
  */
8308
8476
  static VALUE
8309
8477
  datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
@@ -8322,11 +8490,11 @@ datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
8322
8490
 
8323
8491
  {
8324
8492
  int argc2 = 1;
8325
- VALUE argv2[2];
8493
+ VALUE argv2[2], hash;
8326
8494
  argv2[0] = str;
8327
8495
  argv2[1] = opt;
8328
8496
  if (!NIL_P(opt)) argc2++;
8329
- VALUE hash = date_s__xmlschema(argc2, argv2, klass);
8497
+ hash = date_s__xmlschema(argc2, argv2, klass);
8330
8498
  return dt_new_by_frags(klass, hash, sg);
8331
8499
  }
8332
8500
  }
@@ -8343,8 +8511,8 @@ datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
8343
8511
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8344
8512
  *
8345
8513
  * Raise an ArgumentError when the string length is longer than _limit_.
8346
- * You can stop this check by passing `limit: nil`, but note that
8347
- * it may take a long time to parse.
8514
+ * You can stop this check by passing <code>limit: nil</code>, but note
8515
+ * that it may take a long time to parse.
8348
8516
  */
8349
8517
  static VALUE
8350
8518
  datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
@@ -8363,11 +8531,11 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
8363
8531
 
8364
8532
  {
8365
8533
  int argc2 = 1;
8366
- VALUE argv2[2];
8534
+ VALUE argv2[2], hash;
8367
8535
  argv2[0] = str;
8368
8536
  argv2[1] = opt;
8369
8537
  if (!NIL_P(opt)) argc2++;
8370
- VALUE hash = date_s__rfc2822(argc2, argv2, klass);
8538
+ hash = date_s__rfc2822(argc2, argv2, klass);
8371
8539
  return dt_new_by_frags(klass, hash, sg);
8372
8540
  }
8373
8541
  }
@@ -8383,8 +8551,8 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
8383
8551
  * #=> #<DateTime: 2001-02-03T04:05:06+00:00 ...>
8384
8552
  *
8385
8553
  * Raise an ArgumentError when the string length is longer than _limit_.
8386
- * You can stop this check by passing `limit: nil`, but note that
8387
- * it may take a long time to parse.
8554
+ * You can stop this check by passing <code>limit: nil</code>, but note
8555
+ * that it may take a long time to parse.
8388
8556
  */
8389
8557
  static VALUE
8390
8558
  datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
@@ -8403,11 +8571,11 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
8403
8571
 
8404
8572
  {
8405
8573
  int argc2 = 1;
8406
- VALUE argv2[2];
8574
+ VALUE argv2[2], hash;
8407
8575
  argv2[0] = str;
8408
8576
  argv2[1] = opt;
8409
8577
  if (!NIL_P(opt)) argc2++;
8410
- VALUE hash = date_s__httpdate(argc2, argv2, klass);
8578
+ hash = date_s__httpdate(argc2, argv2, klass);
8411
8579
  return dt_new_by_frags(klass, hash, sg);
8412
8580
  }
8413
8581
  }
@@ -8428,8 +8596,8 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
8428
8596
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8429
8597
  *
8430
8598
  * Raise an ArgumentError when the string length is longer than _limit_.
8431
- * You can stop this check by passing `limit: nil`, but note that
8432
- * it may take a long time to parse.
8599
+ * You can stop this check by passing <code>limit: nil</code>, but note
8600
+ * that it may take a long time to parse.
8433
8601
  */
8434
8602
  static VALUE
8435
8603
  datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
@@ -8448,11 +8616,11 @@ datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
8448
8616
 
8449
8617
  {
8450
8618
  int argc2 = 1;
8451
- VALUE argv2[2];
8619
+ VALUE argv2[2], hash;
8452
8620
  argv2[0] = str;
8453
8621
  argv2[1] = opt;
8454
8622
  if (!NIL_P(opt)) argc2++;
8455
- VALUE hash = date_s__jisx0301(argc2, argv2, klass);
8623
+ hash = date_s__jisx0301(argc2, argv2, klass);
8456
8624
  return dt_new_by_frags(klass, hash, sg);
8457
8625
  }
8458
8626
  }
@@ -8475,181 +8643,16 @@ dt_lite_to_s(VALUE self)
8475
8643
 
8476
8644
  /*
8477
8645
  * call-seq:
8478
- * dt.strftime([format='%FT%T%:z']) -> string
8479
- *
8480
- * Formats date according to the directives in the given format
8481
- * string.
8482
- * The directives begin with a percent (%) character.
8483
- * Any text not listed as a directive will be passed through to the
8484
- * output string.
8485
- *
8486
- * A directive consists of a percent (%) character,
8487
- * zero or more flags, an optional minimum field width,
8488
- * an optional modifier, and a conversion specifier
8489
- * as follows.
8490
- *
8491
- * %<flags><width><modifier><conversion>
8492
- *
8493
- * Flags:
8494
- * - don't pad a numerical output.
8495
- * _ use spaces for padding.
8496
- * 0 use zeros for padding.
8497
- * ^ upcase the result string.
8498
- * # change case.
8499
- * : use colons for %z.
8500
- *
8501
- * The minimum field width specifies the minimum width.
8502
- *
8503
- * The modifiers are "E" and "O".
8504
- * They are ignored.
8505
- *
8506
- * Format directives:
8507
- *
8508
- * Date (Year, Month, Day):
8509
- * %Y - Year with century (can be negative, 4 digits at least)
8510
- * -0001, 0000, 1995, 2009, 14292, etc.
8511
- * %C - year / 100 (round down. 20 in 2009)
8512
- * %y - year % 100 (00..99)
8513
- *
8514
- * %m - Month of the year, zero-padded (01..12)
8515
- * %_m blank-padded ( 1..12)
8516
- * %-m no-padded (1..12)
8517
- * %B - The full month name (``January'')
8518
- * %^B uppercased (``JANUARY'')
8519
- * %b - The abbreviated month name (``Jan'')
8520
- * %^b uppercased (``JAN'')
8521
- * %h - Equivalent to %b
8522
- *
8523
- * %d - Day of the month, zero-padded (01..31)
8524
- * %-d no-padded (1..31)
8525
- * %e - Day of the month, blank-padded ( 1..31)
8526
- *
8527
- * %j - Day of the year (001..366)
8528
- *
8529
- * Time (Hour, Minute, Second, Subsecond):
8530
- * %H - Hour of the day, 24-hour clock, zero-padded (00..23)
8531
- * %k - Hour of the day, 24-hour clock, blank-padded ( 0..23)
8532
- * %I - Hour of the day, 12-hour clock, zero-padded (01..12)
8533
- * %l - Hour of the day, 12-hour clock, blank-padded ( 1..12)
8534
- * %P - Meridian indicator, lowercase (``am'' or ``pm'')
8535
- * %p - Meridian indicator, uppercase (``AM'' or ``PM'')
8536
- *
8537
- * %M - Minute of the hour (00..59)
8538
- *
8539
- * %S - Second of the minute (00..60)
8540
- *
8541
- * %L - Millisecond of the second (000..999)
8542
- * %N - Fractional seconds digits, default is 9 digits (nanosecond)
8543
- * %3N millisecond (3 digits) %15N femtosecond (15 digits)
8544
- * %6N microsecond (6 digits) %18N attosecond (18 digits)
8545
- * %9N nanosecond (9 digits) %21N zeptosecond (21 digits)
8546
- * %12N picosecond (12 digits) %24N yoctosecond (24 digits)
8547
- *
8548
- * Time zone:
8549
- * %z - Time zone as hour and minute offset from UTC (e.g. +0900)
8550
- * %:z - hour and minute offset from UTC with a colon (e.g. +09:00)
8551
- * %::z - hour, minute and second offset from UTC (e.g. +09:00:00)
8552
- * %:::z - hour, minute and second offset from UTC
8553
- * (e.g. +09, +09:30, +09:30:30)
8554
- * %Z - Equivalent to %:z (e.g. +09:00)
8555
- *
8556
- * Weekday:
8557
- * %A - The full weekday name (``Sunday'')
8558
- * %^A uppercased (``SUNDAY'')
8559
- * %a - The abbreviated name (``Sun'')
8560
- * %^a uppercased (``SUN'')
8561
- * %u - Day of the week (Monday is 1, 1..7)
8562
- * %w - Day of the week (Sunday is 0, 0..6)
8563
- *
8564
- * ISO 8601 week-based year and week number:
8565
- * The week 1 of YYYY starts with a Monday and includes YYYY-01-04.
8566
- * The days in the year before the first week are in the last week of
8567
- * the previous year.
8568
- * %G - The week-based year
8569
- * %g - The last 2 digits of the week-based year (00..99)
8570
- * %V - Week number of the week-based year (01..53)
8571
- *
8572
- * Week number:
8573
- * The week 1 of YYYY starts with a Sunday or Monday (according to %U
8574
- * or %W). The days in the year before the first week are in week 0.
8575
- * %U - Week number of the year. The week starts with Sunday. (00..53)
8576
- * %W - Week number of the year. The week starts with Monday. (00..53)
8577
- *
8578
- * Seconds since the Unix Epoch:
8579
- * %s - Number of seconds since 1970-01-01 00:00:00 UTC.
8580
- * %Q - Number of milliseconds since 1970-01-01 00:00:00 UTC.
8581
- *
8582
- * Literal string:
8583
- * %n - Newline character (\n)
8584
- * %t - Tab character (\t)
8585
- * %% - Literal ``%'' character
8586
- *
8587
- * Combination:
8588
- * %c - date and time (%a %b %e %T %Y)
8589
- * %D - Date (%m/%d/%y)
8590
- * %F - The ISO 8601 date format (%Y-%m-%d)
8591
- * %v - VMS date (%e-%^b-%Y)
8592
- * %x - Same as %D
8593
- * %X - Same as %T
8594
- * %r - 12-hour time (%I:%M:%S %p)
8595
- * %R - 24-hour time (%H:%M)
8596
- * %T - 24-hour time (%H:%M:%S)
8597
- * %+ - date(1) (%a %b %e %H:%M:%S %Z %Y)
8598
- *
8599
- * This method is similar to the strftime() function defined in ISO C
8600
- * and POSIX.
8601
- * Several directives (%a, %A, %b, %B, %c, %p, %r, %x, %X, %E*, %O* and %Z)
8602
- * are locale dependent in the function.
8603
- * However, this method is locale independent.
8604
- * So, the result may differ even if the same format string is used in other
8605
- * systems such as C.
8606
- * It is good practice to avoid %x and %X because there are corresponding
8607
- * locale independent representations, %D and %T.
8608
- *
8609
- * Examples:
8610
- *
8611
- * d = DateTime.new(2007,11,19,8,37,48,"-06:00")
8612
- * #=> #<DateTime: 2007-11-19T08:37:48-0600 ...>
8613
- * d.strftime("Printed on %m/%d/%Y") #=> "Printed on 11/19/2007"
8614
- * d.strftime("at %I:%M%p") #=> "at 08:37AM"
8615
- *
8616
- * Various ISO 8601 formats:
8617
- * %Y%m%d => 20071119 Calendar date (basic)
8618
- * %F => 2007-11-19 Calendar date (extended)
8619
- * %Y-%m => 2007-11 Calendar date, reduced accuracy, specific month
8620
- * %Y => 2007 Calendar date, reduced accuracy, specific year
8621
- * %C => 20 Calendar date, reduced accuracy, specific century
8622
- * %Y%j => 2007323 Ordinal date (basic)
8623
- * %Y-%j => 2007-323 Ordinal date (extended)
8624
- * %GW%V%u => 2007W471 Week date (basic)
8625
- * %G-W%V-%u => 2007-W47-1 Week date (extended)
8626
- * %GW%V => 2007W47 Week date, reduced accuracy, specific week (basic)
8627
- * %G-W%V => 2007-W47 Week date, reduced accuracy, specific week (extended)
8628
- * %H%M%S => 083748 Local time (basic)
8629
- * %T => 08:37:48 Local time (extended)
8630
- * %H%M => 0837 Local time, reduced accuracy, specific minute (basic)
8631
- * %H:%M => 08:37 Local time, reduced accuracy, specific minute (extended)
8632
- * %H => 08 Local time, reduced accuracy, specific hour
8633
- * %H%M%S,%L => 083748,000 Local time with decimal fraction, comma as decimal sign (basic)
8634
- * %T,%L => 08:37:48,000 Local time with decimal fraction, comma as decimal sign (extended)
8635
- * %H%M%S.%L => 083748.000 Local time with decimal fraction, full stop as decimal sign (basic)
8636
- * %T.%L => 08:37:48.000 Local time with decimal fraction, full stop as decimal sign (extended)
8637
- * %H%M%S%z => 083748-0600 Local time and the difference from UTC (basic)
8638
- * %T%:z => 08:37:48-06:00 Local time and the difference from UTC (extended)
8639
- * %Y%m%dT%H%M%S%z => 20071119T083748-0600 Date and time of day for calendar date (basic)
8640
- * %FT%T%:z => 2007-11-19T08:37:48-06:00 Date and time of day for calendar date (extended)
8641
- * %Y%jT%H%M%S%z => 2007323T083748-0600 Date and time of day for ordinal date (basic)
8642
- * %Y-%jT%T%:z => 2007-323T08:37:48-06:00 Date and time of day for ordinal date (extended)
8643
- * %GW%V%uT%H%M%S%z => 2007W471T083748-0600 Date and time of day for week date (basic)
8644
- * %G-W%V-%uT%T%:z => 2007-W47-1T08:37:48-06:00 Date and time of day for week date (extended)
8645
- * %Y%m%dT%H%M => 20071119T0837 Calendar date and local time (basic)
8646
- * %FT%R => 2007-11-19T08:37 Calendar date and local time (extended)
8647
- * %Y%jT%H%MZ => 2007323T0837Z Ordinal date and UTC of day (basic)
8648
- * %Y-%jT%RZ => 2007-323T08:37Z Ordinal date and UTC of day (extended)
8649
- * %GW%V%uT%H%M%z => 2007W471T0837-0600 Week date and local time and difference from UTC (basic)
8650
- * %G-W%V-%uT%R%:z => 2007-W47-1T08:37-06:00 Week date and local time and difference from UTC (extended)
8651
- *
8652
- * See also strftime(3) and ::strptime.
8646
+ * strftime(format = '%FT%T%:z') -> string
8647
+ *
8648
+ * Returns a string representation of +self+,
8649
+ * formatted according the given +format:
8650
+ *
8651
+ * DateTime.now.strftime # => "2022-07-01T11:03:19-05:00"
8652
+ *
8653
+ * For other formats, see
8654
+ * {Formats for Dates and Times}[doc/strftime_formatting.rdoc].
8655
+ *
8653
8656
  */
8654
8657
  static VALUE
8655
8658
  dt_lite_strftime(int argc, VALUE *argv, VALUE self)
@@ -8815,7 +8818,7 @@ time_to_datetime(VALUE self)
8815
8818
  ret = d_complex_new_internal(cDateTime,
8816
8819
  nth, 0,
8817
8820
  0, sf,
8818
- of, DEFAULT_SG,
8821
+ of, GREGORIAN,
8819
8822
  ry, m, d,
8820
8823
  h, min, s,
8821
8824
  HAVE_CIVIL | HAVE_TIME);
@@ -8828,10 +8831,15 @@ time_to_datetime(VALUE self)
8828
8831
 
8829
8832
  /*
8830
8833
  * call-seq:
8831
- * d.to_time -> time
8834
+ * to_time -> time
8835
+ *
8836
+ * Returns a new Time object with the same value as +self+;
8837
+ * if +self+ is a Julian date, derives its Gregorian date
8838
+ * for conversion to the \Time object:
8839
+ *
8840
+ * Date.new(2001, 2, 3).to_time # => 2001-02-03 00:00:00 -0600
8841
+ * Date.new(2001, 2, 3, Date::JULIAN).to_time # => 2001-02-16 00:00:00 -0600
8832
8842
  *
8833
- * Returns a Time object which denotes self. If self is a julian date,
8834
- * convert it to a gregorian date before converting it to Time.
8835
8843
  */
8836
8844
  static VALUE
8837
8845
  date_to_time(VALUE self)
@@ -8852,9 +8860,9 @@ date_to_time(VALUE self)
8852
8860
 
8853
8861
  /*
8854
8862
  * call-seq:
8855
- * d.to_date -> self
8863
+ * to_date -> self
8856
8864
  *
8857
- * Returns self.
8865
+ * Returns +self+.
8858
8866
  */
8859
8867
  static VALUE
8860
8868
  date_to_date(VALUE self)
@@ -8866,7 +8874,10 @@ date_to_date(VALUE self)
8866
8874
  * call-seq:
8867
8875
  * d.to_datetime -> datetime
8868
8876
  *
8869
- * Returns a DateTime object which denotes self.
8877
+ * Returns a DateTime whose value is the same as +self+:
8878
+ *
8879
+ * Date.new(2001, 2, 3).to_datetime # => #<DateTime: 2001-02-03T00:00:00+00:00>
8880
+ *
8870
8881
  */
8871
8882
  static VALUE
8872
8883
  date_to_datetime(VALUE self)
@@ -8911,12 +8922,17 @@ date_to_datetime(VALUE self)
8911
8922
  static VALUE
8912
8923
  datetime_to_time(VALUE self)
8913
8924
  {
8914
- volatile VALUE dup = dup_obj(self);
8925
+ get_d1(self);
8926
+
8927
+ if (m_julian_p(dat)) {
8928
+ self = d_lite_gregorian(self);
8929
+ get_d1a(self);
8930
+ dat = adat;
8931
+ }
8932
+
8915
8933
  {
8916
8934
  VALUE t;
8917
8935
 
8918
- get_d1(dup);
8919
-
8920
8936
  t = rb_funcall(rb_cTime,
8921
8937
  rb_intern("new"),
8922
8938
  7,
@@ -8984,6 +9000,7 @@ datetime_to_datetime(VALUE self)
8984
9000
  #define MIN_JD -327
8985
9001
  #define MAX_JD 366963925
8986
9002
 
9003
+ /* :nodoc: */
8987
9004
  static int
8988
9005
  test_civil(int from, int to, double sg)
8989
9006
  {
@@ -9004,6 +9021,7 @@ test_civil(int from, int to, double sg)
9004
9021
  return 1;
9005
9022
  }
9006
9023
 
9024
+ /* :nodoc: */
9007
9025
  static VALUE
9008
9026
  date_s_test_civil(VALUE klass)
9009
9027
  {
@@ -9024,6 +9042,7 @@ date_s_test_civil(VALUE klass)
9024
9042
  return Qtrue;
9025
9043
  }
9026
9044
 
9045
+ /* :nodoc: */
9027
9046
  static int
9028
9047
  test_ordinal(int from, int to, double sg)
9029
9048
  {
@@ -9044,6 +9063,7 @@ test_ordinal(int from, int to, double sg)
9044
9063
  return 1;
9045
9064
  }
9046
9065
 
9066
+ /* :nodoc: */
9047
9067
  static VALUE
9048
9068
  date_s_test_ordinal(VALUE klass)
9049
9069
  {
@@ -9064,6 +9084,7 @@ date_s_test_ordinal(VALUE klass)
9064
9084
  return Qtrue;
9065
9085
  }
9066
9086
 
9087
+ /* :nodoc: */
9067
9088
  static int
9068
9089
  test_commercial(int from, int to, double sg)
9069
9090
  {
@@ -9084,6 +9105,7 @@ test_commercial(int from, int to, double sg)
9084
9105
  return 1;
9085
9106
  }
9086
9107
 
9108
+ /* :nodoc: */
9087
9109
  static VALUE
9088
9110
  date_s_test_commercial(VALUE klass)
9089
9111
  {
@@ -9104,6 +9126,7 @@ date_s_test_commercial(VALUE klass)
9104
9126
  return Qtrue;
9105
9127
  }
9106
9128
 
9129
+ /* :nodoc: */
9107
9130
  static int
9108
9131
  test_weeknum(int from, int to, int f, double sg)
9109
9132
  {
@@ -9124,6 +9147,7 @@ test_weeknum(int from, int to, int f, double sg)
9124
9147
  return 1;
9125
9148
  }
9126
9149
 
9150
+ /* :nodoc: */
9127
9151
  static VALUE
9128
9152
  date_s_test_weeknum(VALUE klass)
9129
9153
  {
@@ -9148,6 +9172,7 @@ date_s_test_weeknum(VALUE klass)
9148
9172
  return Qtrue;
9149
9173
  }
9150
9174
 
9175
+ /* :nodoc: */
9151
9176
  static int
9152
9177
  test_nth_kday(int from, int to, double sg)
9153
9178
  {
@@ -9168,6 +9193,7 @@ test_nth_kday(int from, int to, double sg)
9168
9193
  return 1;
9169
9194
  }
9170
9195
 
9196
+ /* :nodoc: */
9171
9197
  static VALUE
9172
9198
  date_s_test_nth_kday(VALUE klass)
9173
9199
  {
@@ -9188,6 +9214,7 @@ date_s_test_nth_kday(VALUE klass)
9188
9214
  return Qtrue;
9189
9215
  }
9190
9216
 
9217
+ /* :nodoc: */
9191
9218
  static int
9192
9219
  test_unit_v2v(VALUE i,
9193
9220
  VALUE (* conv1)(VALUE),
@@ -9199,6 +9226,7 @@ test_unit_v2v(VALUE i,
9199
9226
  return f_eqeq_p(o, i);
9200
9227
  }
9201
9228
 
9229
+ /* :nodoc: */
9202
9230
  static int
9203
9231
  test_unit_v2v_iter2(VALUE (* conv1)(VALUE),
9204
9232
  VALUE (* conv2)(VALUE))
@@ -9230,6 +9258,7 @@ test_unit_v2v_iter2(VALUE (* conv1)(VALUE),
9230
9258
  return 1;
9231
9259
  }
9232
9260
 
9261
+ /* :nodoc: */
9233
9262
  static int
9234
9263
  test_unit_v2v_iter(VALUE (* conv1)(VALUE),
9235
9264
  VALUE (* conv2)(VALUE))
@@ -9241,6 +9270,7 @@ test_unit_v2v_iter(VALUE (* conv1)(VALUE),
9241
9270
  return 1;
9242
9271
  }
9243
9272
 
9273
+ /* :nodoc: */
9244
9274
  static VALUE
9245
9275
  date_s_test_unit_conv(VALUE klass)
9246
9276
  {
@@ -9255,6 +9285,7 @@ date_s_test_unit_conv(VALUE klass)
9255
9285
  return Qtrue;
9256
9286
  }
9257
9287
 
9288
+ /* :nodoc: */
9258
9289
  static VALUE
9259
9290
  date_s_test_all(VALUE klass)
9260
9291
  {
@@ -9321,6 +9352,7 @@ mk_ary_of_str(long len, const char *a[])
9321
9352
  return o;
9322
9353
  }
9323
9354
 
9355
+ /* :nodoc: */
9324
9356
  static VALUE
9325
9357
  d_lite_zero(VALUE x)
9326
9358
  {
@@ -9358,152 +9390,81 @@ Init_date_core(void)
9358
9390
  negative_inf = -INFINITY;
9359
9391
 
9360
9392
  /*
9361
- * date and datetime class - Tadayoshi Funaba 1998-2011
9362
- *
9363
- * 'date' provides two classes: Date and DateTime.
9364
- *
9365
- * == Terms and Definitions
9366
- *
9367
- * Some terms and definitions are based on ISO 8601 and JIS X 0301.
9368
- *
9369
- * === Calendar Date
9370
- *
9371
- * The calendar date is a particular day of a calendar year,
9372
- * identified by its ordinal number within a calendar month within
9373
- * that year.
9374
- *
9375
- * In those classes, this is so-called "civil".
9376
- *
9377
- * === Ordinal Date
9393
+ * \Class \Date provides methods for storing and manipulating
9394
+ * calendar dates.
9378
9395
  *
9379
- * The ordinal date is a particular day of a calendar year identified
9380
- * by its ordinal number within the year.
9396
+ * Consider using
9397
+ * {class Time}[https://docs.ruby-lang.org/en/master/Time.html]
9398
+ * instead of class \Date if:
9381
9399
  *
9382
- * In those classes, this is so-called "ordinal".
9400
+ * - You need both dates and times; \Date handles only dates.
9401
+ * - You need only Gregorian dates (and not Julian dates);
9402
+ * see {Julian and Gregorian Calendars}[rdoc-ref:calendars.rdoc].
9383
9403
  *
9384
- * === Week Date
9404
+ * A \Date object, once created, is immutable, and cannot be modified.
9385
9405
  *
9386
- * The week date is a date identified by calendar week and day numbers.
9406
+ * == Creating a \Date
9387
9407
  *
9388
- * The calendar week is a seven day period within a calendar year,
9389
- * starting on a Monday and identified by its ordinal number within
9390
- * the year; the first calendar week of the year is the one that
9391
- * includes the first Thursday of that year. In the Gregorian
9392
- * calendar, this is equivalent to the week which includes January 4.
9408
+ * You can create a date for the current date, using Date.today:
9393
9409
  *
9394
- * In those classes, this is so-called "commercial".
9410
+ * Date.today # => #<Date: 1999-12-31>
9395
9411
  *
9396
- * === Julian Day Number
9412
+ * You can create a specific date from various combinations of arguments:
9397
9413
  *
9398
- * The Julian day number is in elapsed days since noon (Greenwich Mean
9399
- * Time) on January 1, 4713 BCE (in the Julian calendar).
9414
+ * - Date.new takes integer year, month, and day-of-month:
9400
9415
  *
9401
- * In this document, the astronomical Julian day number is the same as
9402
- * the original Julian day number. And the chronological Julian day
9403
- * number is a variation of the Julian day number. Its days begin at
9404
- * midnight on local time.
9416
+ * Date.new(1999, 12, 31) # => #<Date: 1999-12-31>
9405
9417
  *
9406
- * In this document, when the term "Julian day number" simply appears,
9407
- * it just refers to "chronological Julian day number", not the
9408
- * original.
9418
+ * - Date.ordinal takes integer year and day-of-year:
9409
9419
  *
9410
- * In those classes, those are so-called "ajd" and "jd".
9420
+ * Date.ordinal(1999, 365) # => #<Date: 1999-12-31>
9411
9421
  *
9412
- * === Modified Julian Day Number
9422
+ * - Date.jd takes integer Julian day:
9413
9423
  *
9414
- * The modified Julian day number is in elapsed days since midnight
9415
- * (Coordinated Universal Time) on November 17, 1858 CE (in the
9416
- * Gregorian calendar).
9424
+ * Date.jd(2451544) # => #<Date: 1999-12-31>
9417
9425
  *
9418
- * In this document, the astronomical modified Julian day number is
9419
- * the same as the original modified Julian day number. And the
9420
- * chronological modified Julian day number is a variation of the
9421
- * modified Julian day number. Its days begin at midnight on local
9422
- * time.
9426
+ * - Date.commercial takes integer commercial data (year, week, day-of-week):
9423
9427
  *
9424
- * In this document, when the term "modified Julian day number" simply
9425
- * appears, it just refers to "chronological modified Julian day
9426
- * number", not the original.
9428
+ * Date.commercial(1999, 52, 5) # => #<Date: 1999-12-31>
9427
9429
  *
9428
- * In those classes, those are so-called "amjd" and "mjd".
9430
+ * - Date.parse takes a string, which it parses heuristically:
9429
9431
  *
9430
- * == Date
9432
+ * Date.parse('1999-12-31') # => #<Date: 1999-12-31>
9433
+ * Date.parse('31-12-1999') # => #<Date: 1999-12-31>
9434
+ * Date.parse('1999-365') # => #<Date: 1999-12-31>
9435
+ * Date.parse('1999-W52-5') # => #<Date: 1999-12-31>
9431
9436
  *
9432
- * A subclass of Object that includes the Comparable module and
9433
- * easily handles date.
9437
+ * - Date.strptime takes a date string and a format string,
9438
+ * then parses the date string according to the format string:
9434
9439
  *
9435
- * A Date object is created with Date::new, Date::jd, Date::ordinal,
9436
- * Date::commercial, Date::parse, Date::strptime, Date::today,
9437
- * Time#to_date, etc.
9440
+ * Date.strptime('1999-12-31', '%Y-%m-%d') # => #<Date: 1999-12-31>
9441
+ * Date.strptime('31-12-1999', '%d-%m-%Y') # => #<Date: 1999-12-31>
9442
+ * Date.strptime('1999-365', '%Y-%j') # => #<Date: 1999-12-31>
9443
+ * Date.strptime('1999-W52-5', '%G-W%V-%u') # => #<Date: 1999-12-31>
9444
+ * Date.strptime('1999 52 5', '%Y %U %w') # => #<Date: 1999-12-31>
9445
+ * Date.strptime('1999 52 5', '%Y %W %u') # => #<Date: 1999-12-31>
9446
+ * Date.strptime('fri31dec99', '%a%d%b%y') # => #<Date: 1999-12-31>
9438
9447
  *
9439
- * require 'date'
9440
- *
9441
- * Date.new(2001,2,3)
9442
- * #=> #<Date: 2001-02-03 ...>
9443
- * Date.jd(2451944)
9444
- * #=> #<Date: 2001-02-03 ...>
9445
- * Date.ordinal(2001,34)
9446
- * #=> #<Date: 2001-02-03 ...>
9447
- * Date.commercial(2001,5,6)
9448
- * #=> #<Date: 2001-02-03 ...>
9449
- * Date.parse('2001-02-03')
9450
- * #=> #<Date: 2001-02-03 ...>
9451
- * Date.strptime('03-02-2001', '%d-%m-%Y')
9452
- * #=> #<Date: 2001-02-03 ...>
9453
- * Time.new(2001,2,3).to_date
9454
- * #=> #<Date: 2001-02-03 ...>
9455
- *
9456
- * All date objects are immutable; hence cannot modify themselves.
9448
+ * See also the specialized methods in
9449
+ * {"Specialized Format Strings" in Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html#label-Specialized+Format+Strings]
9457
9450
  *
9458
- * The concept of a date object can be represented as a tuple
9459
- * of the day count, the offset and the day of calendar reform.
9451
+ * == Argument +limit+
9460
9452
  *
9461
- * The day count denotes the absolute position of a temporal
9462
- * dimension. The offset is relative adjustment, which determines
9463
- * decoded local time with the day count. The day of calendar
9464
- * reform denotes the start day of the new style. The old style
9465
- * of the West is the Julian calendar which was adopted by
9466
- * Caesar. The new style is the Gregorian calendar, which is the
9467
- * current civil calendar of many countries.
9453
+ * Certain singleton methods in \Date that parse string arguments
9454
+ * also take optional keyword argument +limit+,
9455
+ * which can limit the length of the string argument.
9468
9456
  *
9469
- * The day count is virtually the astronomical Julian day number.
9470
- * The offset in this class is usually zero, and cannot be
9471
- * specified directly.
9472
- *
9473
- * A Date object can be created with an optional argument,
9474
- * the day of calendar reform as a Julian day number, which
9475
- * should be 2298874 to 2426355 or negative/positive infinity.
9476
- * The default value is +Date::ITALY+ (2299161=1582-10-15).
9477
- * See also sample/cal.rb.
9457
+ * When +limit+ is:
9478
9458
  *
9479
- * $ ruby sample/cal.rb -c it 10 1582
9480
- * October 1582
9481
- * S M Tu W Th F S
9482
- * 1 2 3 4 15 16
9483
- * 17 18 19 20 21 22 23
9484
- * 24 25 26 27 28 29 30
9485
- * 31
9486
- *
9487
- * $ ruby sample/cal.rb -c gb 9 1752
9488
- * September 1752
9489
- * S M Tu W Th F S
9490
- * 1 2 14 15 16
9491
- * 17 18 19 20 21 22 23
9492
- * 24 25 26 27 28 29 30
9493
- *
9494
- * A Date object has various methods. See each reference.
9495
- *
9496
- * d = Date.parse('3rd Feb 2001')
9497
- * #=> #<Date: 2001-02-03 ...>
9498
- * d.year #=> 2001
9499
- * d.mon #=> 2
9500
- * d.mday #=> 3
9501
- * d.wday #=> 6
9502
- * d += 1 #=> #<Date: 2001-02-04 ...>
9503
- * d.strftime('%a %d %b %Y') #=> "Sun 04 Feb 2001"
9459
+ * - Non-negative:
9460
+ * raises ArgumentError if the string length is greater than _limit_.
9461
+ * - Other numeric or +nil+: ignores +limit+.
9462
+ * - Other non-numeric: raises TypeError.
9504
9463
  *
9505
9464
  */
9506
9465
  cDate = rb_define_class("Date", rb_cObject);
9466
+
9467
+ /* Exception for invalid date/time */
9507
9468
  eDateError = rb_define_class_under(cDate, "Error", rb_eArgError);
9508
9469
 
9509
9470
  rb_include_module(cDate, rb_mComparable);