date 3.3.3 → 3.4.1
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.
- checksums.yaml +4 -4
- data/ext/date/date_core.c +58 -82
- data/ext/date/date_parse.c +3 -0
- data/ext/date/date_strptime.c +3 -0
- data/ext/date/extconf.rb +1 -0
- data/ext/date/prereq.mk +1 -1
- data/ext/date/zonetab.h +627 -625
- data/ext/date/zonetab.list +5 -2
- data/lib/date.rb +1 -1
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b82de0c3b7d4685d8aa478af5ce4d919808d79d83b71012b0f61052c37a1506
|
4
|
+
data.tar.gz: 6a1adeb0b3d43f3afdc9edb06c1b2bfd081f726e3b91dff9d5d482e77cf87d11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69bc90e06d9f020e5c391732c6b95c8fabe8abe705be5760b5f303980b90ffda96ae55c0ad837a23c8c6701b63783a0a7c16bd2e13f82f7903c1c47089312645
|
7
|
+
data.tar.gz: 7c0aff9c2c9a43f3ac6b1f53a9530805792c7941c45074f5bb58cb90b24890efc641b374cbee7fd36ac8124426a748da92a67d148bb07329b62a90f14bfb9194
|
data/ext/date/date_core.c
CHANGED
@@ -57,7 +57,7 @@ static VALUE sym_hour, sym_min, sym_sec, sym_sec_fraction, sym_zone;
|
|
57
57
|
#define f_add3(x,y,z) f_add(f_add(x, y), z)
|
58
58
|
#define f_sub3(x,y,z) f_sub(f_sub(x, y), z)
|
59
59
|
|
60
|
-
#define f_frozen_ary(...)
|
60
|
+
#define f_frozen_ary(...) rb_ary_freeze(rb_ary_new3(__VA_ARGS__))
|
61
61
|
|
62
62
|
static VALUE date_initialize(int argc, VALUE *argv, VALUE self);
|
63
63
|
static VALUE datetime_initialize(int argc, VALUE *argv, VALUE self);
|
@@ -248,6 +248,11 @@ f_negative_p(VALUE x)
|
|
248
248
|
#define date_sg_t double
|
249
249
|
#endif
|
250
250
|
|
251
|
+
#define JULIAN_EPOCH_DATE "-4712-01-01"
|
252
|
+
#define JULIAN_EPOCH_DATETIME JULIAN_EPOCH_DATE "T00:00:00+00:00"
|
253
|
+
#define JULIAN_EPOCH_DATETIME_RFC3339 "Mon, 1 Jan -4712 00:00:00 +0000"
|
254
|
+
#define JULIAN_EPOCH_DATETIME_HTTPDATE "Mon, 01 Jan -4712 00:00:00 GMT"
|
255
|
+
|
251
256
|
/* A set of nth, jd, df and sf denote ajd + 1/2. Each ajd begin at
|
252
257
|
* noon of GMT (assume equal to UTC). However, this begins at
|
253
258
|
* midnight.
|
@@ -2589,8 +2594,6 @@ date_s__valid_civil_p(int argc, VALUE *argv, VALUE klass)
|
|
2589
2594
|
*
|
2590
2595
|
* See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
|
2591
2596
|
*
|
2592
|
-
* Date.valid_date? is an alias for Date.valid_civil?.
|
2593
|
-
*
|
2594
2597
|
* Related: Date.jd, Date.new.
|
2595
2598
|
*/
|
2596
2599
|
static VALUE
|
@@ -2986,8 +2989,6 @@ date_s_julian_leap_p(VALUE klass, VALUE y)
|
|
2986
2989
|
* Date.gregorian_leap?(2000) # => true
|
2987
2990
|
* Date.gregorian_leap?(2001) # => false
|
2988
2991
|
*
|
2989
|
-
* Date.leap? is an alias for Date.gregorian_leap?.
|
2990
|
-
*
|
2991
2992
|
* Related: Date.julian_leap?.
|
2992
2993
|
*/
|
2993
2994
|
static VALUE
|
@@ -3493,8 +3494,6 @@ date_s_civil(int argc, VALUE *argv, VALUE klass)
|
|
3493
3494
|
*
|
3494
3495
|
* See argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
|
3495
3496
|
*
|
3496
|
-
* Date.civil is an alias for Date.new.
|
3497
|
-
*
|
3498
3497
|
* Related: Date.jd.
|
3499
3498
|
*/
|
3500
3499
|
static VALUE
|
@@ -4431,7 +4430,7 @@ date_s_strptime(int argc, VALUE *argv, VALUE klass)
|
|
4431
4430
|
|
4432
4431
|
switch (argc) {
|
4433
4432
|
case 0:
|
4434
|
-
str = rb_str_new2(
|
4433
|
+
str = rb_str_new2(JULIAN_EPOCH_DATE);
|
4435
4434
|
case 1:
|
4436
4435
|
fmt = rb_str_new2("%F");
|
4437
4436
|
case 2:
|
@@ -4470,12 +4469,6 @@ check_limit(VALUE str, VALUE opt)
|
|
4470
4469
|
{
|
4471
4470
|
size_t slen, limit;
|
4472
4471
|
if (NIL_P(str)) return;
|
4473
|
-
if (SYMBOL_P(str)) {
|
4474
|
-
rb_category_warn(RB_WARN_CATEGORY_DEPRECATED,
|
4475
|
-
"The ability to parse Symbol is an unintentional bug and is deprecated");
|
4476
|
-
str = rb_sym2str(str);
|
4477
|
-
}
|
4478
|
-
|
4479
4472
|
StringValue(str);
|
4480
4473
|
slen = RSTRING_LEN(str);
|
4481
4474
|
limit = get_limit(opt);
|
@@ -4490,8 +4483,7 @@ date_s__parse_internal(int argc, VALUE *argv, VALUE klass)
|
|
4490
4483
|
{
|
4491
4484
|
VALUE vstr, vcomp, hash, opt;
|
4492
4485
|
|
4493
|
-
rb_scan_args(argc, argv, "11:", &vstr, &vcomp, &opt);
|
4494
|
-
if (!NIL_P(opt)) argc--;
|
4486
|
+
argc = rb_scan_args(argc, argv, "11:", &vstr, &vcomp, &opt);
|
4495
4487
|
check_limit(vstr, opt);
|
4496
4488
|
StringValue(vstr);
|
4497
4489
|
if (!rb_enc_str_asciicompat_p(vstr))
|
@@ -4578,12 +4570,11 @@ date_s_parse(int argc, VALUE *argv, VALUE klass)
|
|
4578
4570
|
{
|
4579
4571
|
VALUE str, comp, sg, opt;
|
4580
4572
|
|
4581
|
-
rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
|
4582
|
-
if (!NIL_P(opt)) argc--;
|
4573
|
+
argc = rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
|
4583
4574
|
|
4584
4575
|
switch (argc) {
|
4585
4576
|
case 0:
|
4586
|
-
str = rb_str_new2(
|
4577
|
+
str = rb_str_new2(JULIAN_EPOCH_DATE);
|
4587
4578
|
case 1:
|
4588
4579
|
comp = Qtrue;
|
4589
4580
|
case 2:
|
@@ -4658,12 +4649,11 @@ date_s_iso8601(int argc, VALUE *argv, VALUE klass)
|
|
4658
4649
|
{
|
4659
4650
|
VALUE str, sg, opt;
|
4660
4651
|
|
4661
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4662
|
-
if (!NIL_P(opt)) argc--;
|
4652
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4663
4653
|
|
4664
4654
|
switch (argc) {
|
4665
4655
|
case 0:
|
4666
|
-
str = rb_str_new2(
|
4656
|
+
str = rb_str_new2(JULIAN_EPOCH_DATE);
|
4667
4657
|
case 1:
|
4668
4658
|
sg = INT2FIX(DEFAULT_SG);
|
4669
4659
|
}
|
@@ -4729,12 +4719,11 @@ date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
|
|
4729
4719
|
{
|
4730
4720
|
VALUE str, sg, opt;
|
4731
4721
|
|
4732
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4733
|
-
if (!NIL_P(opt)) argc--;
|
4722
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4734
4723
|
|
4735
4724
|
switch (argc) {
|
4736
4725
|
case 0:
|
4737
|
-
str = rb_str_new2(
|
4726
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
4738
4727
|
case 1:
|
4739
4728
|
sg = INT2FIX(DEFAULT_SG);
|
4740
4729
|
}
|
@@ -4798,12 +4787,11 @@ date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
|
|
4798
4787
|
{
|
4799
4788
|
VALUE str, sg, opt;
|
4800
4789
|
|
4801
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4802
|
-
if (!NIL_P(opt)) argc--;
|
4790
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4803
4791
|
|
4804
4792
|
switch (argc) {
|
4805
4793
|
case 0:
|
4806
|
-
str = rb_str_new2(
|
4794
|
+
str = rb_str_new2(JULIAN_EPOCH_DATE);
|
4807
4795
|
case 1:
|
4808
4796
|
sg = INT2FIX(DEFAULT_SG);
|
4809
4797
|
}
|
@@ -4832,8 +4820,6 @@ date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
|
|
4832
4820
|
*
|
4833
4821
|
* See argument {limit}[rdoc-ref:Date@Argument+limit].
|
4834
4822
|
*
|
4835
|
-
* Date._rfc822 is an alias for Date._rfc2822.
|
4836
|
-
*
|
4837
4823
|
* Related: Date.rfc2822 (returns a \Date object).
|
4838
4824
|
*/
|
4839
4825
|
static VALUE
|
@@ -4864,8 +4850,6 @@ date_s__rfc2822(int argc, VALUE *argv, VALUE klass)
|
|
4864
4850
|
* - Argument {start}[rdoc-ref:calendars.rdoc@Argument+start].
|
4865
4851
|
* - Argument {limit}[rdoc-ref:Date@Argument+limit].
|
4866
4852
|
*
|
4867
|
-
* Date.rfc822 is an alias for Date.rfc2822.
|
4868
|
-
*
|
4869
4853
|
* Related: Date._rfc2822 (returns a hash).
|
4870
4854
|
*/
|
4871
4855
|
static VALUE
|
@@ -4873,11 +4857,11 @@ date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
|
|
4873
4857
|
{
|
4874
4858
|
VALUE str, sg, opt;
|
4875
4859
|
|
4876
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4860
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4877
4861
|
|
4878
4862
|
switch (argc) {
|
4879
4863
|
case 0:
|
4880
|
-
str = rb_str_new2(
|
4864
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME_RFC3339);
|
4881
4865
|
case 1:
|
4882
4866
|
sg = INT2FIX(DEFAULT_SG);
|
4883
4867
|
}
|
@@ -4941,11 +4925,11 @@ date_s_httpdate(int argc, VALUE *argv, VALUE klass)
|
|
4941
4925
|
{
|
4942
4926
|
VALUE str, sg, opt;
|
4943
4927
|
|
4944
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4928
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
4945
4929
|
|
4946
4930
|
switch (argc) {
|
4947
4931
|
case 0:
|
4948
|
-
str = rb_str_new2(
|
4932
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME_HTTPDATE);
|
4949
4933
|
case 1:
|
4950
4934
|
sg = INT2FIX(DEFAULT_SG);
|
4951
4935
|
}
|
@@ -5013,12 +4997,11 @@ date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
|
|
5013
4997
|
{
|
5014
4998
|
VALUE str, sg, opt;
|
5015
4999
|
|
5016
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
5017
|
-
if (!NIL_P(opt)) argc--;
|
5000
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
5018
5001
|
|
5019
5002
|
switch (argc) {
|
5020
5003
|
case 0:
|
5021
|
-
str = rb_str_new2(
|
5004
|
+
str = rb_str_new2(JULIAN_EPOCH_DATE);
|
5022
5005
|
case 1:
|
5023
5006
|
sg = INT2FIX(DEFAULT_SG);
|
5024
5007
|
}
|
@@ -5346,7 +5329,6 @@ d_lite_yday(VALUE self)
|
|
5346
5329
|
*
|
5347
5330
|
* Date.new(2001, 2, 3).mon # => 2
|
5348
5331
|
*
|
5349
|
-
* Date#month is an alias for Date#mon.
|
5350
5332
|
*/
|
5351
5333
|
static VALUE
|
5352
5334
|
d_lite_mon(VALUE self)
|
@@ -5363,7 +5345,6 @@ d_lite_mon(VALUE self)
|
|
5363
5345
|
*
|
5364
5346
|
* Date.new(2001, 2, 3).mday # => 3
|
5365
5347
|
*
|
5366
|
-
* Date#day is an alias for Date#mday.
|
5367
5348
|
*/
|
5368
5349
|
static VALUE
|
5369
5350
|
d_lite_mday(VALUE self)
|
@@ -5613,7 +5594,6 @@ d_lite_hour(VALUE self)
|
|
5613
5594
|
*
|
5614
5595
|
* DateTime.new(2001, 2, 3, 4, 5, 6).min # => 5
|
5615
5596
|
*
|
5616
|
-
* Date#minute is an alias for Date#min.
|
5617
5597
|
*/
|
5618
5598
|
static VALUE
|
5619
5599
|
d_lite_min(VALUE self)
|
@@ -5630,7 +5610,6 @@ d_lite_min(VALUE self)
|
|
5630
5610
|
*
|
5631
5611
|
* DateTime.new(2001, 2, 3, 4, 5, 6).sec # => 6
|
5632
5612
|
*
|
5633
|
-
* Date#second is an alias for Date#sec.
|
5634
5613
|
*/
|
5635
5614
|
static VALUE
|
5636
5615
|
d_lite_sec(VALUE self)
|
@@ -5648,7 +5627,6 @@ d_lite_sec(VALUE self)
|
|
5648
5627
|
*
|
5649
5628
|
* DateTime.new(2001, 2, 3, 4, 5, 6.5).sec_fraction # => (1/2)
|
5650
5629
|
*
|
5651
|
-
* Date#second_fraction is an alias for Date#sec_fraction.
|
5652
5630
|
*/
|
5653
5631
|
static VALUE
|
5654
5632
|
d_lite_sec_fraction(VALUE self)
|
@@ -6347,9 +6325,11 @@ minus_dd(VALUE self, VALUE other)
|
|
6347
6325
|
* call-seq:
|
6348
6326
|
* d - other -> date or rational
|
6349
6327
|
*
|
6350
|
-
*
|
6351
|
-
*
|
6352
|
-
*
|
6328
|
+
* If the other is a date object, returns a Rational
|
6329
|
+
* whose value is the difference between the two dates in days.
|
6330
|
+
* If the other is a numeric value, returns a date object
|
6331
|
+
* pointing +other+ days before self.
|
6332
|
+
* If the other is a fractional number,
|
6353
6333
|
* assumes its precision is at most nanosecond.
|
6354
6334
|
*
|
6355
6335
|
* Date.new(2001,2,3) - 1 #=> #<Date: 2001-02-02 ...>
|
@@ -6424,7 +6404,6 @@ d_lite_prev_day(int argc, VALUE *argv, VALUE self)
|
|
6424
6404
|
* d.to_s # => "2001-02-03"
|
6425
6405
|
* d.next.to_s # => "2001-02-04"
|
6426
6406
|
*
|
6427
|
-
* Date#succ is an alias for Date#next.
|
6428
6407
|
*/
|
6429
6408
|
static VALUE
|
6430
6409
|
d_lite_next(VALUE self)
|
@@ -7298,7 +7277,6 @@ strftimev(const char *fmt, VALUE self,
|
|
7298
7277
|
*
|
7299
7278
|
* See {asctime}[https://linux.die.net/man/3/asctime].
|
7300
7279
|
*
|
7301
|
-
* Date#ctime is an alias for Date#asctime.
|
7302
7280
|
*/
|
7303
7281
|
static VALUE
|
7304
7282
|
d_lite_asctime(VALUE self)
|
@@ -7316,7 +7294,6 @@ d_lite_asctime(VALUE self)
|
|
7316
7294
|
*
|
7317
7295
|
* Date.new(2001, 2, 3).iso8601 # => "2001-02-03"
|
7318
7296
|
*
|
7319
|
-
* Date#xmlschema is an alias for Date#iso8601.
|
7320
7297
|
*/
|
7321
7298
|
static VALUE
|
7322
7299
|
d_lite_iso8601(VALUE self)
|
@@ -7349,7 +7326,6 @@ d_lite_rfc3339(VALUE self)
|
|
7349
7326
|
*
|
7350
7327
|
* Date.new(2001, 2, 3).rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000"
|
7351
7328
|
*
|
7352
|
-
* Date#rfc822 is an alias for Date#rfc2822.
|
7353
7329
|
*/
|
7354
7330
|
static VALUE
|
7355
7331
|
d_lite_rfc2822(VALUE self)
|
@@ -8398,7 +8374,7 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass)
|
|
8398
8374
|
|
8399
8375
|
switch (argc) {
|
8400
8376
|
case 0:
|
8401
|
-
str = rb_str_new2(
|
8377
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8402
8378
|
case 1:
|
8403
8379
|
fmt = rb_str_new2("%FT%T%z");
|
8404
8380
|
case 2:
|
@@ -8446,12 +8422,11 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass)
|
|
8446
8422
|
{
|
8447
8423
|
VALUE str, comp, sg, opt;
|
8448
8424
|
|
8449
|
-
rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
|
8450
|
-
if (!NIL_P(opt)) argc--;
|
8425
|
+
argc = rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
|
8451
8426
|
|
8452
8427
|
switch (argc) {
|
8453
8428
|
case 0:
|
8454
|
-
str = rb_str_new2(
|
8429
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8455
8430
|
case 1:
|
8456
8431
|
comp = Qtrue;
|
8457
8432
|
case 2:
|
@@ -8493,12 +8468,11 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
|
|
8493
8468
|
{
|
8494
8469
|
VALUE str, sg, opt;
|
8495
8470
|
|
8496
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8497
|
-
if (!NIL_P(opt)) argc--;
|
8471
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8498
8472
|
|
8499
8473
|
switch (argc) {
|
8500
8474
|
case 0:
|
8501
|
-
str = rb_str_new2(
|
8475
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8502
8476
|
case 1:
|
8503
8477
|
sg = INT2FIX(DEFAULT_SG);
|
8504
8478
|
}
|
@@ -8508,7 +8482,7 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
|
|
8508
8482
|
VALUE argv2[2], hash;
|
8509
8483
|
argv2[0] = str;
|
8510
8484
|
argv2[1] = opt;
|
8511
|
-
if (!NIL_P(opt)) argc2
|
8485
|
+
if (!NIL_P(opt)) argc2++;
|
8512
8486
|
hash = date_s__iso8601(argc2, argv2, klass);
|
8513
8487
|
return dt_new_by_frags(klass, hash, sg);
|
8514
8488
|
}
|
@@ -8533,12 +8507,11 @@ datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
|
|
8533
8507
|
{
|
8534
8508
|
VALUE str, sg, opt;
|
8535
8509
|
|
8536
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8537
|
-
if (!NIL_P(opt)) argc--;
|
8510
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8538
8511
|
|
8539
8512
|
switch (argc) {
|
8540
8513
|
case 0:
|
8541
|
-
str = rb_str_new2(
|
8514
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8542
8515
|
case 1:
|
8543
8516
|
sg = INT2FIX(DEFAULT_SG);
|
8544
8517
|
}
|
@@ -8573,12 +8546,11 @@ datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
|
|
8573
8546
|
{
|
8574
8547
|
VALUE str, sg, opt;
|
8575
8548
|
|
8576
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8577
|
-
if (!NIL_P(opt)) argc--;
|
8549
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8578
8550
|
|
8579
8551
|
switch (argc) {
|
8580
8552
|
case 0:
|
8581
|
-
str = rb_str_new2(
|
8553
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8582
8554
|
case 1:
|
8583
8555
|
sg = INT2FIX(DEFAULT_SG);
|
8584
8556
|
}
|
@@ -8614,12 +8586,11 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
|
|
8614
8586
|
{
|
8615
8587
|
VALUE str, sg, opt;
|
8616
8588
|
|
8617
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8618
|
-
if (!NIL_P(opt)) argc--;
|
8589
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8619
8590
|
|
8620
8591
|
switch (argc) {
|
8621
8592
|
case 0:
|
8622
|
-
str = rb_str_new2(
|
8593
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME_RFC3339);
|
8623
8594
|
case 1:
|
8624
8595
|
sg = INT2FIX(DEFAULT_SG);
|
8625
8596
|
}
|
@@ -8654,12 +8625,11 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
|
|
8654
8625
|
{
|
8655
8626
|
VALUE str, sg, opt;
|
8656
8627
|
|
8657
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8658
|
-
if (!NIL_P(opt)) argc--;
|
8628
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8659
8629
|
|
8660
8630
|
switch (argc) {
|
8661
8631
|
case 0:
|
8662
|
-
str = rb_str_new2(
|
8632
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME_HTTPDATE);
|
8663
8633
|
case 1:
|
8664
8634
|
sg = INT2FIX(DEFAULT_SG);
|
8665
8635
|
}
|
@@ -8699,12 +8669,11 @@ datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
|
|
8699
8669
|
{
|
8700
8670
|
VALUE str, sg, opt;
|
8701
8671
|
|
8702
|
-
rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8703
|
-
if (!NIL_P(opt)) argc--;
|
8672
|
+
argc = rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
|
8704
8673
|
|
8705
8674
|
switch (argc) {
|
8706
8675
|
case 0:
|
8707
|
-
str = rb_str_new2(
|
8676
|
+
str = rb_str_new2(JULIAN_EPOCH_DATETIME);
|
8708
8677
|
case 1:
|
8709
8678
|
sg = INT2FIX(DEFAULT_SG);
|
8710
8679
|
}
|
@@ -8745,8 +8714,8 @@ dt_lite_to_s(VALUE self)
|
|
8745
8714
|
*
|
8746
8715
|
* DateTime.now.strftime # => "2022-07-01T11:03:19-05:00"
|
8747
8716
|
*
|
8748
|
-
* For other formats,
|
8749
|
-
* {Formats for Dates and Times}[
|
8717
|
+
* For other formats,
|
8718
|
+
* see {Formats for Dates and Times}[https://docs.ruby-lang.org/en/master/strftime_formatting_rdoc.html]:
|
8750
8719
|
*
|
8751
8720
|
*/
|
8752
8721
|
static VALUE
|
@@ -8980,18 +8949,23 @@ time_to_datetime(VALUE self)
|
|
8980
8949
|
static VALUE
|
8981
8950
|
date_to_time(VALUE self)
|
8982
8951
|
{
|
8952
|
+
VALUE t;
|
8953
|
+
|
8983
8954
|
get_d1a(self);
|
8984
8955
|
|
8985
8956
|
if (m_julian_p(adat)) {
|
8986
|
-
VALUE
|
8987
|
-
get_d1b(
|
8957
|
+
VALUE g = d_lite_gregorian(self);
|
8958
|
+
get_d1b(g);
|
8988
8959
|
adat = bdat;
|
8960
|
+
self = g;
|
8989
8961
|
}
|
8990
8962
|
|
8991
|
-
|
8963
|
+
t = f_local3(rb_cTime,
|
8992
8964
|
m_real_year(adat),
|
8993
8965
|
INT2FIX(m_mon(adat)),
|
8994
8966
|
INT2FIX(m_mday(adat)));
|
8967
|
+
RB_GC_GUARD(self); /* may be the converted gregorian */
|
8968
|
+
return t;
|
8995
8969
|
}
|
8996
8970
|
|
8997
8971
|
/*
|
@@ -9061,9 +9035,10 @@ datetime_to_time(VALUE self)
|
|
9061
9035
|
get_d1(self);
|
9062
9036
|
|
9063
9037
|
if (m_julian_p(dat)) {
|
9064
|
-
|
9065
|
-
get_d1a(
|
9038
|
+
VALUE g = d_lite_gregorian(self);
|
9039
|
+
get_d1a(g);
|
9066
9040
|
dat = adat;
|
9041
|
+
self = g;
|
9067
9042
|
}
|
9068
9043
|
|
9069
9044
|
{
|
@@ -9080,6 +9055,7 @@ datetime_to_time(VALUE self)
|
|
9080
9055
|
f_add(INT2FIX(m_sec(dat)),
|
9081
9056
|
m_sf_in_sec(dat)),
|
9082
9057
|
INT2FIX(m_of(dat)));
|
9058
|
+
RB_GC_GUARD(self); /* may be the converted gregorian */
|
9083
9059
|
return t;
|
9084
9060
|
}
|
9085
9061
|
}
|
@@ -9484,7 +9460,7 @@ mk_ary_of_str(long len, const char *a[])
|
|
9484
9460
|
}
|
9485
9461
|
rb_ary_push(o, e);
|
9486
9462
|
}
|
9487
|
-
|
9463
|
+
rb_ary_freeze(o);
|
9488
9464
|
return o;
|
9489
9465
|
}
|
9490
9466
|
|
data/ext/date/date_parse.c
CHANGED
@@ -7,6 +7,9 @@
|
|
7
7
|
#include "ruby/re.h"
|
8
8
|
#include <ctype.h>
|
9
9
|
|
10
|
+
#undef strncasecmp
|
11
|
+
#define strncasecmp STRNCASECMP
|
12
|
+
|
10
13
|
RUBY_EXTERN VALUE rb_int_positive_pow(long x, unsigned long y);
|
11
14
|
RUBY_EXTERN unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow);
|
12
15
|
|
data/ext/date/date_strptime.c
CHANGED
data/ext/date/extconf.rb
CHANGED
@@ -3,6 +3,7 @@ require 'mkmf'
|
|
3
3
|
|
4
4
|
config_string("strict_warnflags") {|w| $warnflags += " #{w}"}
|
5
5
|
|
6
|
+
append_cflags("-Wno-compound-token-split-by-macro") if RUBY_VERSION < "2.7."
|
6
7
|
have_func("rb_category_warn")
|
7
8
|
with_werror("", {:werror => true}) do |opt, |
|
8
9
|
have_var("timezone", "time.h", opt)
|