1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

time.rb: yday support

* lib/time.rb (Time.make_time): added yday support.
  [ruby-core:87545] [Bug #14860]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-07-24 07:47:01 +00:00
parent 727f6ee8ef
commit 728b75bc9b
2 changed files with 25 additions and 4 deletions

View file

@ -245,8 +245,8 @@ class Time
end
private :apply_offset
def make_time(date, year, mon, day, hour, min, sec, sec_fraction, zone, now)
if !year && !mon && !day && !hour && !min && !sec && !sec_fraction
def make_time(date, year, yday, mon, day, hour, min, sec, sec_fraction, zone, now)
if !year && !yday && !mon && !day && !hour && !min && !sec && !sec_fraction
raise ArgumentError, "no time information in #{date.inspect}"
end
@ -256,6 +256,17 @@ class Time
off = zone_offset(zone, off_year) if zone
end
if yday
mon, day = (yday-1).divmod(31)
mon += 1
day += 1
t = make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now)
diff = yday - t.yday
return t if diff.zero?
day += diff
return make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now)
end
if now
if off
now = now.getlocal(off) if now.utc_offset != off
@ -363,7 +374,7 @@ class Time
d = Date._parse(date, comp)
year = d[:year]
year = yield(year) if year && !comp
make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
make_time(date, year, d[:yday], d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
end
#
@ -441,7 +452,7 @@ class Time
else
year = d[:year]
year = yield(year) if year && block_given?
t = make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
t = make_time(date, year, d[:yday], d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
end
t
end

View file

@ -495,6 +495,16 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc:
assert_equal(true, t.utc?)
end
def test_strptime_j
t = Time.strptime("2018-365", "%Y-%j")
assert_equal(2018, t.year)
assert_equal(12, t.mon)
assert_equal(31, t.day)
assert_equal(0, t.hour)
assert_equal(0, t.min)
assert_equal(0, t.sec)
end
def test_nsec
assert_equal(123456789, Time.parse("2000-01-01T00:00:00.123456789+00:00").tv_nsec)
end