mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* time.c (time_arg): use the year argument as-is. [ruby-dev:38194]
* lib/time.rb (Time.parse): interpret small year 0..99 as 1950..2049. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7930673c5d
commit
16dc9e04cb
5 changed files with 27 additions and 19 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed Apr 22 01:27:38 2009 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* time.c (time_arg): use the year argument as-is. [ruby-dev:38194]
|
||||
|
||||
* lib/time.rb (Time.parse): interpret small year 0..99 as 1950..2049.
|
||||
|
||||
Wed Apr 22 00:32:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* time.c (find_time_t): constified.
|
||||
|
|
5
NEWS
5
NEWS
|
@ -52,6 +52,11 @@ with all sufficient information, see the ChangeLog file.
|
|||
* time_t restriction is removed to represent before 1901 and after 2038.
|
||||
Proleptic Gregorian calendar is used for old dates.
|
||||
|
||||
* incompatible changes:
|
||||
* The year argument of Time.{utc,gm,local,mktime} is now interpreted as
|
||||
the value itself. For example, Time.utc(99) means the year 99 AD,
|
||||
not 1999 AD.
|
||||
|
||||
* Kernel
|
||||
* extended methods:
|
||||
* respond_to? returns false for methods which simply raise
|
||||
|
|
16
lib/time.rb
16
lib/time.rb
|
@ -258,7 +258,21 @@ class Time
|
|||
raise ArgumentError, "no time information in #{date.inspect}"
|
||||
end
|
||||
year = d[:year]
|
||||
year = yield(year) if year && block_given?
|
||||
if year
|
||||
if block_given?
|
||||
year = yield(year)
|
||||
else
|
||||
year = if year < 0
|
||||
year
|
||||
elsif year < 50
|
||||
2000 + year
|
||||
elsif year < 100
|
||||
1900 + year
|
||||
else
|
||||
year
|
||||
end
|
||||
end
|
||||
end
|
||||
make_time(year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
|
||||
end
|
||||
|
||||
|
|
|
@ -219,8 +219,6 @@ class TestTime < Test::Unit::TestCase
|
|||
def test_utc_or_local
|
||||
assert_equal(T2000, Time.gm(2000))
|
||||
assert_equal(T2000, Time.gm(0, 0, 0, 1, 1, 2000, :foo, :bar, false, :baz))
|
||||
assert_equal(T2000, Time.gm(0))
|
||||
assert_equal(T2000, Time.gm(100))
|
||||
assert_equal(T2000, Time.gm(2000, "jan"))
|
||||
assert_equal(T2000, Time.gm(2000, "1"))
|
||||
assert_equal(T2000, Time.gm(2000, 1, 1, 0, 0, 0, 0))
|
||||
|
|
17
time.c
17
time.c
|
@ -1398,8 +1398,6 @@ time_arg(int argc, VALUE *argv, struct vtm *vtm)
|
|||
{
|
||||
VALUE v[8];
|
||||
int i;
|
||||
long year;
|
||||
VALUE x;
|
||||
|
||||
vtm->year = INT2FIX(0);
|
||||
vtm->mon = 0;
|
||||
|
@ -1432,20 +1430,7 @@ time_arg(int argc, VALUE *argv, struct vtm *vtm)
|
|||
vtm->isdst = -1;
|
||||
}
|
||||
|
||||
x = obj2vint(v[0]);
|
||||
if (FIXNUM_P(x)) {
|
||||
year = FIX2LONG(x);
|
||||
if (0 <= year && year < 39) {
|
||||
rb_warning("2 digits year is used: %ld", year);
|
||||
year += 2000;
|
||||
}
|
||||
else if (69 <= year && year < 139) {
|
||||
rb_warning("2 or 3 digits year is used: %ld", year);
|
||||
year += 1900;
|
||||
}
|
||||
x = LONG2FIX(year);
|
||||
}
|
||||
vtm->year = x;
|
||||
vtm->year = obj2vint(v[0]);
|
||||
|
||||
if (NIL_P(v[1])) {
|
||||
vtm->mon = 1;
|
||||
|
|
Loading…
Reference in a new issue